From b34c1a35483260f88f1f466b12d04e8da190665e Mon Sep 17 00:00:00 2001 From: CircleCI Docs Date: Thu, 9 Jan 2025 21:56:20 +0000 Subject: [PATCH] rebase --- docs/build/html/.buildinfo | 2 +- docs/build/html/_sources/dev/extensions.rst | 26 +- docs/build/html/_sources/dev/mlx_in_cpp.rst | 121 + docs/build/html/_sources/index.rst | 3 + docs/build/html/_sources/install.rst | 4 +- .../_autosummary/mlx.core.export_function.rst | 6 + .../_autosummary/mlx.core.export_to_dot.rst | 6 + .../python/_autosummary/mlx.core.exporter.rst | 6 + .../python/_autosummary/mlx.core.finfo.rst | 30 + .../_autosummary/mlx.core.import_function.rst | 6 + .../python/_autosummary/mlx.core.kron.rst | 6 + .../python/_autosummary/mlx.core.slice.rst | 6 + .../_autosummary/mlx.core.slice_update.rst | 6 + .../_autosummary/mlx.core.unflatten.rst | 6 + .../build/html/_sources/python/data_types.rst | 1 + docs/build/html/_sources/python/export.rst | 14 + docs/build/html/_sources/python/ops.rst | 4 + docs/build/html/_sources/usage/compile.rst | 74 + .../build/html/_sources/usage/distributed.rst | 7 +- docs/build/html/_sources/usage/export.rst | 288 + docs/build/html/_static/basic.css | 2 +- .../html/_static/documentation_options.js | 2 +- docs/build/html/_static/pygments.css | 242 +- .../_static/scripts/pydata-sphinx-theme.js | 2 +- .../scripts/pydata-sphinx-theme.js.map | 2 +- .../_static/styles/pydata-sphinx-theme.css | 6 +- .../styles/pydata-sphinx-theme.css.map | 2 +- docs/build/html/_static/webpack-macros.html | 14 +- docs/build/html/allocator_8h.html | 65 +- docs/build/html/allocator_8h.js | 10 + docs/build/html/allocator_8h_source.html | 84 +- docs/build/html/annotated.html | 355 +- docs/build/html/annotated_dup.js | 460 ++ docs/build/html/array_8h.html | 77 +- docs/build/html/array_8h.js | 14 + docs/build/html/array_8h_source.html | 1408 ++--- docs/build/html/atomic_8h.html | 113 +- docs/build/html/atomic_8h.js | 18 + docs/build/html/atomic_8h_source.html | 85 +- docs/build/html/attn_2loader_8h.html | 65 +- docs/build/html/attn_2loader_8h.js | 7 + docs/build/html/attn_2loader_8h_source.html | 126 +- docs/build/html/attn_2mma_8h.html | 69 +- docs/build/html/attn_2mma_8h.js | 10 + docs/build/html/attn_2mma_8h_source.html | 285 +- docs/build/html/attn_2params_8h.html | 65 +- docs/build/html/attn_2params_8h.js | 4 + docs/build/html/attn_2params_8h_source.html | 86 +- docs/build/html/attn_8h.html | 65 +- docs/build/html/attn_8h.js | 5 + docs/build/html/attn_8h_source.html | 93 +- .../html/backend_2accelerate_2utils_8h.html | 65 +- .../html/backend_2accelerate_2utils_8h.js | 4 + .../backend_2accelerate_2utils_8h_source.html | 77 +- docs/build/html/backend_2common_2load_8h.html | 65 +- docs/build/html/backend_2common_2load_8h.js | 4 + .../html/backend_2common_2load_8h_source.html | 67 +- docs/build/html/backend_2common_2ops_8h.html | 65 +- docs/build/html/backend_2common_2ops_8h.js | 66 + .../html/backend_2common_2ops_8h_source.html | 577 +- .../build/html/backend_2common_2utils_8h.html | 116 +- docs/build/html/backend_2common_2utils_8h.js | 18 + .../backend_2common_2utils_8h_source.html | 485 +- .../html/backend_2metal_2allocator_8h.html | 110 +- .../html/backend_2metal_2allocator_8h.js | 6 + .../backend_2metal_2allocator_8h_source.html | 102 +- .../build/html/backend_2metal_2device_8h.html | 65 +- docs/build/html/backend_2metal_2device_8h.js | 11 + .../backend_2metal_2device_8h_source.html | 90 +- .../backend_2metal_2kernels_2complex_8h.html | 99 +- .../backend_2metal_2kernels_2complex_8h.js | 17 + ...nd_2metal_2kernels_2complex_8h_source.html | 67 +- .../html/backend_2metal_2kernels_2fft_8h.html | 132 +- .../html/backend_2metal_2kernels_2fft_8h.js | 36 + ...ackend_2metal_2kernels_2fft_8h_source.html | 118 +- ...backend_2metal_2kernels_2jit_2bf16_8h.html | 65 +- .../backend_2metal_2kernels_2jit_2bf16_8h.js | 6 + ..._2metal_2kernels_2jit_2bf16_8h_source.html | 65 +- ...2metal_2kernels_2metal__3__0_2bf16_8h.html | 755 +-- ...d_2metal_2kernels_2metal__3__0_2bf16_8h.js | 358 ++ ...2kernels_2metal__3__0_2bf16_8h_source.html | 148 +- ...2metal_2kernels_2metal__3__1_2bf16_8h.html | 69 +- ...d_2metal_2kernels_2metal__3__1_2bf16_8h.js | 6 + ...2kernels_2metal__3__1_2bf16_8h_source.html | 74 +- ...nd_2metal_2kernels_2reduction_2ops_8h.html | 69 +- ...kend_2metal_2kernels_2reduction_2ops_8h.js | 13 + ...al_2kernels_2reduction_2ops_8h_source.html | 72 +- ..._2kernels_2steel_2attn_2transforms_8h.html | 65 +- ...al_2kernels_2steel_2attn_2transforms_8h.js | 8 + ...ls_2steel_2attn_2transforms_8h_source.html | 73 +- ..._2kernels_2steel_2gemm_2transforms_8h.html | 65 +- ...al_2kernels_2steel_2gemm_2transforms_8h.js | 8 + ...ls_2steel_2gemm_2transforms_8h_source.html | 78 +- ...kend_2metal_2kernels_2steel_2utils_8h.html | 91 +- ...ackend_2metal_2kernels_2steel_2utils_8h.js | 5 + ...etal_2kernels_2steel_2utils_8h_source.html | 81 +- .../backend_2metal_2kernels_2utils_8h.html | 303 +- .../html/backend_2metal_2kernels_2utils_8h.js | 52 + ...kend_2metal_2kernels_2utils_8h_source.html | 866 +-- docs/build/html/backend_2metal_2utils_8h.html | 77 +- docs/build/html/backend_2metal_2utils_8h.js | 14 + .../html/backend_2metal_2utils_8h_source.html | 190 +- docs/build/html/bf16__math_8h.html | 65 +- docs/build/html/bf16__math_8h.js | 179 + docs/build/html/bf16__math_8h_source.html | 95 +- docs/build/html/binary__ops_8h.html | 65 +- docs/build/html/binary__ops_8h.js | 29 + docs/build/html/binary__ops_8h_source.html | 71 +- .../build/html/class_thread_pool-members.html | 60 +- docs/build/html/class_thread_pool.html | 71 +- docs/build/html/class_thread_pool.js | 6 + docs/build/html/classes.html | 119 +- .../classmlx_1_1core_1_1_abs-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_abs.html | 87 +- docs/build/html/classmlx_1_1core_1_1_abs.js | 12 + .../classmlx_1_1core_1_1_add-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_add.html | 87 +- docs/build/html/classmlx_1_1core_1_1_add.js | 12 + .../classmlx_1_1core_1_1_add_m_m-members.html | 81 +- .../html/classmlx_1_1core_1_1_add_m_m.html | 108 +- .../html/classmlx_1_1core_1_1_add_m_m.js | 11 + .../classmlx_1_1core_1_1_arange-members.html | 81 +- .../html/classmlx_1_1core_1_1_arange.html | 108 +- .../build/html/classmlx_1_1core_1_1_arange.js | 10 + .../classmlx_1_1core_1_1_arc_cos-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_cos.html | 87 +- .../html/classmlx_1_1core_1_1_arc_cos.js | 12 + ...classmlx_1_1core_1_1_arc_cosh-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_cosh.html | 87 +- .../html/classmlx_1_1core_1_1_arc_cosh.js | 12 + .../classmlx_1_1core_1_1_arc_sin-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_sin.html | 87 +- .../html/classmlx_1_1core_1_1_arc_sin.js | 12 + ...classmlx_1_1core_1_1_arc_sinh-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_sinh.html | 87 +- .../html/classmlx_1_1core_1_1_arc_sinh.js | 12 + .../classmlx_1_1core_1_1_arc_tan-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_tan.html | 87 +- .../html/classmlx_1_1core_1_1_arc_tan.js | 12 + ...classmlx_1_1core_1_1_arc_tan2-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_tan2.html | 87 +- .../html/classmlx_1_1core_1_1_arc_tan2.js | 12 + ...classmlx_1_1core_1_1_arc_tanh-members.html | 64 +- .../html/classmlx_1_1core_1_1_arc_tanh.html | 87 +- .../html/classmlx_1_1core_1_1_arc_tanh.js | 12 + ...mlx_1_1core_1_1_arg_partition-members.html | 81 +- .../classmlx_1_1core_1_1_arg_partition.html | 114 +- .../classmlx_1_1core_1_1_arg_partition.js | 13 + ...assmlx_1_1core_1_1_arg_reduce-members.html | 81 +- .../html/classmlx_1_1core_1_1_arg_reduce.html | 114 +- .../html/classmlx_1_1core_1_1_arg_reduce.js | 17 + ...classmlx_1_1core_1_1_arg_sort-members.html | 81 +- .../html/classmlx_1_1core_1_1_arg_sort.html | 110 +- .../html/classmlx_1_1core_1_1_arg_sort.js | 11 + ...assmlx_1_1core_1_1_as_strided-members.html | 81 +- .../html/classmlx_1_1core_1_1_as_strided.html | 114 +- .../html/classmlx_1_1core_1_1_as_strided.js | 11 + .../classmlx_1_1core_1_1_as_type-members.html | 81 +- .../html/classmlx_1_1core_1_1_as_type.html | 114 +- .../html/classmlx_1_1core_1_1_as_type.js | 13 + ...lx_1_1core_1_1_bitwise_binary-members.html | 83 +- .../classmlx_1_1core_1_1_bitwise_binary.html | 116 +- .../classmlx_1_1core_1_1_bitwise_binary.js | 20 + ..._1_1core_1_1_block_masked_m_m-members.html | 81 +- ...classmlx_1_1core_1_1_block_masked_m_m.html | 106 +- .../classmlx_1_1core_1_1_block_masked_m_m.js | 10 + ...lassmlx_1_1core_1_1_broadcast-members.html | 76 +- .../html/classmlx_1_1core_1_1_broadcast.html | 179 +- .../html/classmlx_1_1core_1_1_broadcast.js | 14 + ...lx_1_1core_1_1_broadcast_axes-members.html | 147 + .../classmlx_1_1core_1_1_broadcast_axes.html | 560 ++ .../classmlx_1_1core_1_1_broadcast_axes.js | 14 + .../classmlx_1_1core_1_1_broadcast_axes.png | Bin 0 -> 942 bytes .../classmlx_1_1core_1_1_ceil-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_ceil.html | 87 +- docs/build/html/classmlx_1_1core_1_1_ceil.js | 12 + ...classmlx_1_1core_1_1_cholesky-members.html | 81 +- .../html/classmlx_1_1core_1_1_cholesky.html | 104 +- .../html/classmlx_1_1core_1_1_cholesky.js | 9 + ...classmlx_1_1core_1_1_compiled-members.html | 64 +- .../html/classmlx_1_1core_1_1_compiled.html | 89 +- .../html/classmlx_1_1core_1_1_compiled.js | 13 + ...ssmlx_1_1core_1_1_concatenate-members.html | 81 +- .../classmlx_1_1core_1_1_concatenate.html | 114 +- .../html/classmlx_1_1core_1_1_concatenate.js | 13 + ...lassmlx_1_1core_1_1_conjugate-members.html | 64 +- .../html/classmlx_1_1core_1_1_conjugate.html | 83 +- .../html/classmlx_1_1core_1_1_conjugate.js | 10 + ...assmlx_1_1core_1_1_contiguous-members.html | 64 +- .../html/classmlx_1_1core_1_1_contiguous.html | 87 +- .../html/classmlx_1_1core_1_1_contiguous.js | 12 + ...ssmlx_1_1core_1_1_convolution-members.html | 81 +- .../classmlx_1_1core_1_1_convolution.html | 106 +- .../html/classmlx_1_1core_1_1_convolution.js | 10 + .../classmlx_1_1core_1_1_copy-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_copy.html | 87 +- docs/build/html/classmlx_1_1core_1_1_copy.js | 12 + .../classmlx_1_1core_1_1_cos-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_cos.html | 87 +- docs/build/html/classmlx_1_1core_1_1_cos.js | 12 + .../classmlx_1_1core_1_1_cosh-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_cosh.html | 87 +- docs/build/html/classmlx_1_1core_1_1_cosh.js | 12 + ...1_1core_1_1_custom_transforms-members.html | 64 +- ...lassmlx_1_1core_1_1_custom_transforms.html | 81 +- .../classmlx_1_1core_1_1_custom_transforms.js | 10 + .../classmlx_1_1core_1_1_depends-members.html | 64 +- .../html/classmlx_1_1core_1_1_depends.html | 77 +- .../html/classmlx_1_1core_1_1_depends.js | 8 + .../classmlx_1_1core_1_1_div_mod-members.html | 64 +- .../html/classmlx_1_1core_1_1_div_mod.html | 87 +- .../html/classmlx_1_1core_1_1_div_mod.js | 12 + .../classmlx_1_1core_1_1_divide-members.html | 64 +- .../html/classmlx_1_1core_1_1_divide.html | 87 +- .../build/html/classmlx_1_1core_1_1_divide.js | 12 + ...mlx_1_1core_1_1_dynamic_slice-members.html | 146 + ...> classmlx_1_1core_1_1_dynamic_slice.html} | 322 +- .../classmlx_1_1core_1_1_dynamic_slice.js | 13 + .../classmlx_1_1core_1_1_dynamic_slice.png | Bin 0 -> 936 bytes ...core_1_1_dynamic_slice_update-members.html | 146 + ...smlx_1_1core_1_1_dynamic_slice_update.html | 525 ++ ...assmlx_1_1core_1_1_dynamic_slice_update.js | 13 + ...ssmlx_1_1core_1_1_dynamic_slice_update.png | Bin 0 -> 1015 bytes .../classmlx_1_1core_1_1_eigh-members.html | 73 +- .../build/html/classmlx_1_1core_1_1_eigh.html | 110 +- docs/build/html/classmlx_1_1core_1_1_eigh.js | 11 + .../classmlx_1_1core_1_1_equal-members.html | 81 +- .../html/classmlx_1_1core_1_1_equal.html | 114 +- docs/build/html/classmlx_1_1core_1_1_equal.js | 13 + .../classmlx_1_1core_1_1_erf-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_erf.html | 87 +- docs/build/html/classmlx_1_1core_1_1_erf.js | 12 + .../classmlx_1_1core_1_1_erf_inv-members.html | 64 +- .../html/classmlx_1_1core_1_1_erf_inv.html | 87 +- .../html/classmlx_1_1core_1_1_erf_inv.js | 12 + .../classmlx_1_1core_1_1_event-members.html | 64 +- .../html/classmlx_1_1core_1_1_event.html | 77 +- docs/build/html/classmlx_1_1core_1_1_event.js | 13 + .../classmlx_1_1core_1_1_exp-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_exp.html | 87 +- docs/build/html/classmlx_1_1core_1_1_exp.js | 12 + ...ssmlx_1_1core_1_1_expand_dims-members.html | 147 + .../classmlx_1_1core_1_1_expand_dims.html | 560 ++ .../html/classmlx_1_1core_1_1_expand_dims.js | 14 + .../html/classmlx_1_1core_1_1_expand_dims.png | Bin 0 -> 918 bytes .../classmlx_1_1core_1_1_expm1-members.html | 64 +- .../html/classmlx_1_1core_1_1_expm1.html | 85 +- docs/build/html/classmlx_1_1core_1_1_expm1.js | 11 + .../classmlx_1_1core_1_1_f_f_t-members.html | 81 +- .../html/classmlx_1_1core_1_1_f_f_t.html | 110 +- docs/build/html/classmlx_1_1core_1_1_f_f_t.js | 12 + .../classmlx_1_1core_1_1_flatten-members.html | 147 + .../html/classmlx_1_1core_1_1_flatten.html | 570 ++ .../html/classmlx_1_1core_1_1_flatten.js | 14 + .../html/classmlx_1_1core_1_1_flatten.png | Bin 0 -> 887 bytes .../classmlx_1_1core_1_1_floor-members.html | 64 +- .../html/classmlx_1_1core_1_1_floor.html | 87 +- docs/build/html/classmlx_1_1core_1_1_floor.js | 12 + .../classmlx_1_1core_1_1_full-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_full.html | 83 +- docs/build/html/classmlx_1_1core_1_1_full.js | 11 + .../classmlx_1_1core_1_1_gather-members.html | 83 +- .../html/classmlx_1_1core_1_1_gather.html | 126 +- .../build/html/classmlx_1_1core_1_1_gather.js | 13 + ...assmlx_1_1core_1_1_gather_m_m-members.html | 64 +- .../html/classmlx_1_1core_1_1_gather_m_m.html | 79 +- .../html/classmlx_1_1core_1_1_gather_m_m.js | 9 + ...smlx_1_1core_1_1_gather_q_m_m-members.html | 81 +- .../classmlx_1_1core_1_1_gather_q_m_m.html | 110 +- .../html/classmlx_1_1core_1_1_gather_q_m_m.js | 12 + .../classmlx_1_1core_1_1_greater-members.html | 64 +- .../html/classmlx_1_1core_1_1_greater.html | 87 +- .../html/classmlx_1_1core_1_1_greater.js | 12 + ...mlx_1_1core_1_1_greater_equal-members.html | 64 +- .../classmlx_1_1core_1_1_greater_equal.html | 87 +- .../classmlx_1_1core_1_1_greater_equal.js | 12 + ...classmlx_1_1core_1_1_hadamard-members.html | 81 +- .../html/classmlx_1_1core_1_1_hadamard.html | 114 +- .../html/classmlx_1_1core_1_1_hadamard.js | 13 + .../classmlx_1_1core_1_1_imag-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_imag.html | 87 +- docs/build/html/classmlx_1_1core_1_1_imag.js | 12 + .../classmlx_1_1core_1_1_inverse-members.html | 81 +- .../html/classmlx_1_1core_1_1_inverse.html | 104 +- .../html/classmlx_1_1core_1_1_inverse.js | 9 + ...mlx_1_1core_1_1_jit_compiler-members.html} | 70 +- .../classmlx_1_1core_1_1_jit_compiler.html | 194 + .../html/classmlx_1_1core_1_1_jit_compiler.js | 5 + .../classmlx_1_1core_1_1_less-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_less.html | 87 +- docs/build/html/classmlx_1_1core_1_1_less.js | 12 + ...assmlx_1_1core_1_1_less_equal-members.html | 64 +- .../html/classmlx_1_1core_1_1_less_equal.html | 87 +- .../html/classmlx_1_1core_1_1_less_equal.js | 12 + .../classmlx_1_1core_1_1_load-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_load.html | 75 +- docs/build/html/classmlx_1_1core_1_1_load.js | 7 + .../classmlx_1_1core_1_1_log-members.html | 85 +- docs/build/html/classmlx_1_1core_1_1_log.html | 114 +- docs/build/html/classmlx_1_1core_1_1_log.js | 18 + .../classmlx_1_1core_1_1_log1p-members.html | 64 +- .../html/classmlx_1_1core_1_1_log1p.html | 85 +- docs/build/html/classmlx_1_1core_1_1_log1p.js | 11 + ...ssmlx_1_1core_1_1_log_add_exp-members.html | 64 +- .../classmlx_1_1core_1_1_log_add_exp.html | 87 +- .../html/classmlx_1_1core_1_1_log_add_exp.js | 12 + ...ssmlx_1_1core_1_1_logical_and-members.html | 64 +- .../classmlx_1_1core_1_1_logical_and.html | 87 +- .../html/classmlx_1_1core_1_1_logical_and.js | 12 + ...ssmlx_1_1core_1_1_logical_not-members.html | 64 +- .../classmlx_1_1core_1_1_logical_not.html | 87 +- .../html/classmlx_1_1core_1_1_logical_not.js | 12 + ...assmlx_1_1core_1_1_logical_or-members.html | 64 +- .../html/classmlx_1_1core_1_1_logical_or.html | 87 +- .../html/classmlx_1_1core_1_1_logical_or.js | 12 + .../classmlx_1_1core_1_1_matmul-members.html | 64 +- .../html/classmlx_1_1core_1_1_matmul.html | 85 +- .../build/html/classmlx_1_1core_1_1_matmul.js | 11 + .../classmlx_1_1core_1_1_maximum-members.html | 64 +- .../html/classmlx_1_1core_1_1_maximum.html | 87 +- .../html/classmlx_1_1core_1_1_maximum.js | 12 + .../classmlx_1_1core_1_1_minimum-members.html | 64 +- .../html/classmlx_1_1core_1_1_minimum.html | 87 +- .../html/classmlx_1_1core_1_1_minimum.js | 12 + ...classmlx_1_1core_1_1_multiply-members.html | 64 +- .../html/classmlx_1_1core_1_1_multiply.html | 87 +- .../html/classmlx_1_1core_1_1_multiply.js | 12 + ...classmlx_1_1core_1_1_negative-members.html | 64 +- .../html/classmlx_1_1core_1_1_negative.html | 87 +- .../html/classmlx_1_1core_1_1_negative.js | 12 + ...lassmlx_1_1core_1_1_not_equal-members.html | 64 +- .../html/classmlx_1_1core_1_1_not_equal.html | 87 +- .../html/classmlx_1_1core_1_1_not_equal.js | 12 + ..._1core_1_1_number_of_elements-members.html | 81 +- ...assmlx_1_1core_1_1_number_of_elements.html | 110 +- ...classmlx_1_1core_1_1_number_of_elements.js | 11 + .../classmlx_1_1core_1_1_pad-members.html | 83 +- docs/build/html/classmlx_1_1core_1_1_pad.html | 122 +- docs/build/html/classmlx_1_1core_1_1_pad.js | 12 + ...lassmlx_1_1core_1_1_partition-members.html | 81 +- .../html/classmlx_1_1core_1_1_partition.html | 114 +- .../html/classmlx_1_1core_1_1_partition.js | 13 + .../classmlx_1_1core_1_1_power-members.html | 64 +- .../html/classmlx_1_1core_1_1_power.html | 87 +- docs/build/html/classmlx_1_1core_1_1_power.js | 12 + ...lassmlx_1_1core_1_1_primitive-members.html | 64 +- .../html/classmlx_1_1core_1_1_primitive.html | 115 +- .../html/classmlx_1_1core_1_1_primitive.js | 19 + .../classmlx_1_1core_1_1_q_r_f-members.html | 64 +- .../html/classmlx_1_1core_1_1_q_r_f.html | 75 +- docs/build/html/classmlx_1_1core_1_1_q_r_f.js | 7 + ..._1_1core_1_1_quantized_matmul-members.html | 81 +- ...classmlx_1_1core_1_1_quantized_matmul.html | 114 +- .../classmlx_1_1core_1_1_quantized_matmul.js | 13 + ...ssmlx_1_1core_1_1_random_bits-members.html | 81 +- .../classmlx_1_1core_1_1_random_bits.html | 110 +- .../html/classmlx_1_1core_1_1_random_bits.js | 10 + .../classmlx_1_1core_1_1_real-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_real.html | 87 +- docs/build/html/classmlx_1_1core_1_1_real.js | 12 + .../classmlx_1_1core_1_1_reduce-members.html | 83 +- .../html/classmlx_1_1core_1_1_reduce.html | 112 +- .../build/html/classmlx_1_1core_1_1_reduce.js | 20 + ...lassmlx_1_1core_1_1_remainder-members.html | 64 +- .../html/classmlx_1_1core_1_1_remainder.html | 87 +- .../html/classmlx_1_1core_1_1_remainder.js | 12 + .../classmlx_1_1core_1_1_reshape-members.html | 78 +- .../html/classmlx_1_1core_1_1_reshape.html | 183 +- .../html/classmlx_1_1core_1_1_reshape.js | 14 + .../classmlx_1_1core_1_1_round-members.html | 64 +- .../html/classmlx_1_1core_1_1_round.html | 87 +- docs/build/html/classmlx_1_1core_1_1_round.js | 12 + .../classmlx_1_1core_1_1_s_v_d-members.html | 64 +- .../html/classmlx_1_1core_1_1_s_v_d.html | 77 +- docs/build/html/classmlx_1_1core_1_1_s_v_d.js | 8 + .../classmlx_1_1core_1_1_scan-members.html | 83 +- .../build/html/classmlx_1_1core_1_1_scan.html | 110 +- docs/build/html/classmlx_1_1core_1_1_scan.js | 18 + .../classmlx_1_1core_1_1_scatter-members.html | 83 +- .../html/classmlx_1_1core_1_1_scatter.html | 110 +- .../html/classmlx_1_1core_1_1_scatter.js | 19 + .../classmlx_1_1core_1_1_select-members.html | 64 +- .../html/classmlx_1_1core_1_1_select.html | 87 +- .../build/html/classmlx_1_1core_1_1_select.js | 12 + .../classmlx_1_1core_1_1_sigmoid-members.html | 64 +- .../html/classmlx_1_1core_1_1_sigmoid.html | 87 +- .../html/classmlx_1_1core_1_1_sigmoid.js | 12 + .../classmlx_1_1core_1_1_sign-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_sign.html | 87 +- docs/build/html/classmlx_1_1core_1_1_sign.js | 12 + .../classmlx_1_1core_1_1_sin-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_sin.html | 87 +- docs/build/html/classmlx_1_1core_1_1_sin.js | 12 + .../classmlx_1_1core_1_1_sinh-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_sinh.html | 87 +- docs/build/html/classmlx_1_1core_1_1_sinh.js | 12 + .../classmlx_1_1core_1_1_slice-members.html | 83 +- .../html/classmlx_1_1core_1_1_slice.html | 124 +- docs/build/html/classmlx_1_1core_1_1_slice.js | 12 + ...smlx_1_1core_1_1_slice_update-members.html | 85 +- .../classmlx_1_1core_1_1_slice_update.html | 158 +- .../html/classmlx_1_1core_1_1_slice_update.js | 13 + .../classmlx_1_1core_1_1_softmax-members.html | 81 +- .../html/classmlx_1_1core_1_1_softmax.html | 114 +- .../html/classmlx_1_1core_1_1_softmax.js | 13 + .../classmlx_1_1core_1_1_sort-members.html | 81 +- .../build/html/classmlx_1_1core_1_1_sort.html | 114 +- docs/build/html/classmlx_1_1core_1_1_sort.js | 13 + .../classmlx_1_1core_1_1_split-members.html | 75 +- .../html/classmlx_1_1core_1_1_split.html | 120 +- docs/build/html/classmlx_1_1core_1_1_split.js | 12 + .../classmlx_1_1core_1_1_sqrt-members.html | 81 +- .../build/html/classmlx_1_1core_1_1_sqrt.html | 114 +- docs/build/html/classmlx_1_1core_1_1_sqrt.js | 13 + .../classmlx_1_1core_1_1_square-members.html | 64 +- .../html/classmlx_1_1core_1_1_square.html | 87 +- .../build/html/classmlx_1_1core_1_1_square.js | 12 + .../classmlx_1_1core_1_1_squeeze-members.html | 147 + .../html/classmlx_1_1core_1_1_squeeze.html | 560 ++ .../html/classmlx_1_1core_1_1_squeeze.js | 14 + .../html/classmlx_1_1core_1_1_squeeze.png | Bin 0 -> 911 bytes ...mlx_1_1core_1_1_stop_gradient-members.html | 64 +- .../classmlx_1_1core_1_1_stop_gradient.html | 83 +- .../classmlx_1_1core_1_1_stop_gradient.js | 10 + ...classmlx_1_1core_1_1_subtract-members.html | 64 +- .../html/classmlx_1_1core_1_1_subtract.html | 87 +- .../html/classmlx_1_1core_1_1_subtract.js | 12 + .../classmlx_1_1core_1_1_tan-members.html | 64 +- docs/build/html/classmlx_1_1core_1_1_tan.html | 87 +- docs/build/html/classmlx_1_1core_1_1_tan.js | 12 + .../classmlx_1_1core_1_1_tanh-members.html | 64 +- .../build/html/classmlx_1_1core_1_1_tanh.html | 87 +- docs/build/html/classmlx_1_1core_1_1_tanh.js | 12 + ...lassmlx_1_1core_1_1_transpose-members.html | 83 +- .../html/classmlx_1_1core_1_1_transpose.html | 114 +- .../html/classmlx_1_1core_1_1_transpose.js | 13 + ...x_1_1core_1_1_unary_primitive-members.html | 64 +- .../classmlx_1_1core_1_1_unary_primitive.html | 283 +- .../classmlx_1_1core_1_1_unary_primitive.js | 13 + .../classmlx_1_1core_1_1_unary_primitive.png | Bin 34133 -> 37119 bytes ...assmlx_1_1core_1_1_unflatten-members.html} | 94 +- .../html/classmlx_1_1core_1_1_unflatten.html | 570 ++ .../html/classmlx_1_1core_1_1_unflatten.js | 14 + .../html/classmlx_1_1core_1_1_unflatten.png | Bin 0 -> 900 bytes .../html/classmlx_1_1core_1_1_uniform.png | Bin 876 -> 0 bytes .../classmlx_1_1core_1_1_view-members.html | 83 +- .../build/html/classmlx_1_1core_1_1_view.html | 106 +- docs/build/html/classmlx_1_1core_1_1_view.js | 10 + ...re_1_1allocator_1_1_allocator-members.html | 64 +- ...lx_1_1core_1_1allocator_1_1_allocator.html | 85 +- ...smlx_1_1core_1_1allocator_1_1_allocator.js | 12 + ...1core_1_1allocator_1_1_buffer-members.html | 64 +- ...ssmlx_1_1core_1_1allocator_1_1_buffer.html | 71 +- ...lassmlx_1_1core_1_1allocator_1_1_buffer.js | 7 + ...llocator_1_1_common_allocator-members.html | 64 +- ...ore_1_1allocator_1_1_common_allocator.html | 73 +- ...1core_1_1allocator_1_1_common_allocator.js | 7 + .../classmlx_1_1core_1_1array-members.html | 76 +- .../build/html/classmlx_1_1core_1_1array.html | 277 +- docs/build/html/classmlx_1_1core_1_1array.js | 79 + ...1_1distributed_1_1_all_gather-members.html | 64 +- ...1_1core_1_1distributed_1_1_all_gather.html | 79 +- ...x_1_1core_1_1distributed_1_1_all_gather.js | 10 + ...1_1distributed_1_1_all_reduce-members.html | 64 +- ...1_1core_1_1distributed_1_1_all_reduce.html | 81 +- ...x_1_1core_1_1distributed_1_1_all_reduce.js | 18 + ...istributed_1_1_dist_primitive-members.html | 64 +- ...ore_1_1distributed_1_1_dist_primitive.html | 71 +- ...1core_1_1distributed_1_1_dist_primitive.js | 5 + ...1core_1_1distributed_1_1_recv-members.html | 64 +- ...ssmlx_1_1core_1_1distributed_1_1_recv.html | 73 +- ...lassmlx_1_1core_1_1distributed_1_1_recv.js | 7 + ...1core_1_1distributed_1_1_send-members.html | 64 +- ...ssmlx_1_1core_1_1distributed_1_1_send.html | 75 +- ...lassmlx_1_1core_1_1distributed_1_1_send.js | 8 + ...uted_1_1detail_1_1_group_impl-members.html | 127 + ...1distributed_1_1detail_1_1_group_impl.html | 345 ++ ...1_1distributed_1_1detail_1_1_group_impl.js | 10 + ...e_1_1fast_1_1_affine_quantize-members.html | 73 +- ...x_1_1core_1_1fast_1_1_affine_quantize.html | 106 +- ...mlx_1_1core_1_1fast_1_1_affine_quantize.js | 10 + ...lx_1_1core_1_1fast_1_1_custom-members.html | 64 +- .../classmlx_1_1core_1_1fast_1_1_custom.html | 75 +- .../classmlx_1_1core_1_1fast_1_1_custom.js | 7 + ...ore_1_1fast_1_1_custom_kernel-members.html | 64 +- ...mlx_1_1core_1_1fast_1_1_custom_kernel.html | 73 +- ...ssmlx_1_1core_1_1fast_1_1_custom_kernel.js | 7 + ..._1core_1_1fast_1_1_layer_norm-members.html | 70 +- ...assmlx_1_1core_1_1fast_1_1_layer_norm.html | 125 +- ...classmlx_1_1core_1_1fast_1_1_layer_norm.js | 9 + ..._1_1fast_1_1_layer_norm_v_j_p-members.html | 73 +- ..._1_1core_1_1fast_1_1_layer_norm_v_j_p.html | 102 +- ...lx_1_1core_1_1fast_1_1_layer_norm_v_j_p.js | 8 + ..._1core_1_1fast_1_1_r_m_s_norm-members.html | 70 +- ...assmlx_1_1core_1_1fast_1_1_r_m_s_norm.html | 125 +- ...classmlx_1_1core_1_1fast_1_1_r_m_s_norm.js | 9 + ..._1_1fast_1_1_r_m_s_norm_v_j_p-members.html | 73 +- ..._1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html | 102 +- ...lx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.js | 8 + ...lx_1_1core_1_1fast_1_1_ro_p_e-members.html | 99 +- .../classmlx_1_1core_1_1fast_1_1_ro_p_e.html | 218 +- .../classmlx_1_1core_1_1fast_1_1_ro_p_e.js | 9 + ..._scaled_dot_product_attention-members.html | 91 +- ...fast_1_1_scaled_dot_product_attention.html | 154 +- ..._1fast_1_1_scaled_dot_product_attention.js | 10 + ...1_1core_1_1io_1_1_file_writer-members.html | 77 +- ...lassmlx_1_1core_1_1io_1_1_file_writer.html | 164 +- .../classmlx_1_1core_1_1io_1_1_file_writer.js | 14 + ..._1io_1_1_parallel_file_reader-members.html | 66 +- ..._1core_1_1io_1_1_parallel_file_reader.html | 95 +- ..._1_1core_1_1io_1_1_parallel_file_reader.js | 12 + ...smlx_1_1core_1_1io_1_1_reader-members.html | 64 +- .../classmlx_1_1core_1_1io_1_1_reader.html | 85 +- .../html/classmlx_1_1core_1_1io_1_1_reader.js | 11 + ...smlx_1_1core_1_1io_1_1_writer-members.html | 64 +- .../classmlx_1_1core_1_1io_1_1_writer.html | 81 +- .../html/classmlx_1_1core_1_1io_1_1_writer.js | 10 + ..._1_1core_1_1metal_1_1_buffer-members.html} | 72 +- .../classmlx_1_1core_1_1metal_1_1_buffer.html | 232 + .../classmlx_1_1core_1_1metal_1_1_buffer.js | 7 + ...x_1_1core_1_1metal_1_1_device-members.html | 64 +- .../classmlx_1_1core_1_1metal_1_1_device.html | 75 +- .../classmlx_1_1core_1_1metal_1_1_device.js | 25 + ..._1_1metal_1_1_metal_allocator-members.html | 64 +- ..._1_1core_1_1metal_1_1_metal_allocator.html | 81 +- ...lx_1_1core_1_1metal_1_1_metal_allocator.js | 15 + ...re_1_1metal_1_1_residency_set-members.html | 64 +- ...lx_1_1core_1_1metal_1_1_residency_set.html | 75 +- ...smlx_1_1core_1_1metal_1_1_residency_set.js | 11 + ...re_1_1random_1_1_key_sequence-members.html | 64 +- ...lx_1_1core_1_1random_1_1_key_sequence.html | 69 +- ...smlx_1_1core_1_1random_1_1_key_sequence.js | 7 + ...re_1_1scheduler_1_1_scheduler-members.html | 89 +- ...lx_1_1core_1_1scheduler_1_1_scheduler.html | 124 +- ...smlx_1_1core_1_1scheduler_1_1_scheduler.js | 18 + ...etfft_1_1detail_1_1_t__dcst23-members.html | 64 +- ...lasspocketfft_1_1detail_1_1_t__dcst23.html | 81 +- .../classpocketfft_1_1detail_1_1_t__dcst23.js | 6 + ...ketfft_1_1detail_1_1_t__dcst4-members.html | 64 +- ...classpocketfft_1_1detail_1_1_t__dcst4.html | 81 +- .../classpocketfft_1_1detail_1_1_t__dcst4.js | 6 + ...cketfft_1_1detail_1_1_t__dct1-members.html | 64 +- .../classpocketfft_1_1detail_1_1_t__dct1.html | 81 +- .../classpocketfft_1_1detail_1_1_t__dct1.js | 6 + ...cketfft_1_1detail_1_1_t__dst1-members.html | 64 +- .../classpocketfft_1_1detail_1_1_t__dst1.html | 81 +- .../classpocketfft_1_1detail_1_1_t__dst1.js | 6 + ...asspocketfft_1_1detail_1_1arr-members.html | 64 +- .../html/classpocketfft_1_1detail_1_1arr.html | 105 +- .../html/classpocketfft_1_1detail_1_1arr.js | 13 + ...ketfft_1_1detail_1_1arr__info-members.html | 64 +- ...classpocketfft_1_1detail_1_1arr__info.html | 83 +- .../classpocketfft_1_1detail_1_1arr__info.js | 12 + ...spocketfft_1_1detail_1_1cfftp-members.html | 64 +- .../classpocketfft_1_1detail_1_1cfftp.html | 77 +- .../html/classpocketfft_1_1detail_1_1cfftp.js | 5 + ...pocketfft_1_1detail_1_1cndarr-members.html | 64 +- .../classpocketfft_1_1detail_1_1cndarr.html | 77 +- .../classpocketfft_1_1detail_1_1cndarr.js | 6 + ...ocketfft_1_1detail_1_1fftblue-members.html | 64 +- .../classpocketfft_1_1detail_1_1fftblue.html | 85 +- .../classpocketfft_1_1detail_1_1fftblue.js | 6 + ...tfft_1_1detail_1_1multi__iter-members.html | 64 +- ...asspocketfft_1_1detail_1_1multi__iter.html | 87 +- ...classpocketfft_1_1detail_1_1multi__iter.js | 14 + ...spocketfft_1_1detail_1_1ndarr-members.html | 64 +- .../classpocketfft_1_1detail_1_1ndarr.html | 73 +- .../html/classpocketfft_1_1detail_1_1ndarr.js | 5 + ...fft_1_1detail_1_1pocketfft__c-members.html | 64 +- ...sspocketfft_1_1detail_1_1pocketfft__c.html | 81 +- ...lasspocketfft_1_1detail_1_1pocketfft__c.js | 6 + ...fft_1_1detail_1_1pocketfft__r-members.html | 64 +- ...sspocketfft_1_1detail_1_1pocketfft__r.html | 81 +- ...lasspocketfft_1_1detail_1_1pocketfft__r.js | 6 + ...ketfft_1_1detail_1_1rev__iter-members.html | 64 +- ...classpocketfft_1_1detail_1_1rev__iter.html | 75 +- .../classpocketfft_1_1detail_1_1rev__iter.js | 8 + ...spocketfft_1_1detail_1_1rfftp-members.html | 64 +- .../classpocketfft_1_1detail_1_1rfftp.html | 77 +- .../html/classpocketfft_1_1detail_1_1rfftp.js | 5 + ...fft_1_1detail_1_1simple__iter-members.html | 64 +- ...sspocketfft_1_1detail_1_1simple__iter.html | 73 +- ...lasspocketfft_1_1detail_1_1simple__iter.js | 7 + ...t_1_1detail_1_1sincos__2pibyn-members.html | 64 +- ...pocketfft_1_1detail_1_1sincos__2pibyn.html | 73 +- ...sspocketfft_1_1detail_1_1sincos__2pibyn.js | 5 + ...hreading_1_1concurrent__queue-members.html | 64 +- ...ail_1_1threading_1_1concurrent__queue.html | 77 +- ...etail_1_1threading_1_1concurrent__queue.js | 6 + ...1detail_1_1threading_1_1latch-members.html | 64 +- ...etfft_1_1detail_1_1threading_1_1latch.html | 73 +- ...cketfft_1_1detail_1_1threading_1_1latch.js | 7 + ..._1_1threading_1_1thread__pool-members.html | 64 +- ..._1detail_1_1threading_1_1thread__pool.html | 77 +- ..._1_1detail_1_1threading_1_1thread__pool.js | 9 + docs/build/html/common_2arange_8h.html | 65 +- docs/build/html/common_2arange_8h.js | 4 + docs/build/html/common_2arange_8h_source.html | 78 +- docs/build/html/common_2binary_8h.html | 80 +- docs/build/html/common_2binary_8h_source.html | 234 +- docs/build/html/common_2binary__two_8h.html | 65 +- .../html/common_2binary__two_8h_source.html | 158 +- docs/build/html/common_2copy_8h.html | 70 +- docs/build/html/common_2copy_8h.js | 12 + docs/build/html/common_2copy_8h_source.html | 108 +- docs/build/html/common_2hadamard_8h.html | 65 +- docs/build/html/common_2hadamard_8h.js | 8 + .../html/common_2hadamard_8h_source.html | 67 +- docs/build/html/common_2reduce_8h.html | 81 +- docs/build/html/common_2reduce_8h.js | 19 + docs/build/html/common_2reduce_8h_source.html | 512 +- docs/build/html/common_2slicing_8h.html | 73 +- docs/build/html/common_2slicing_8h.js | 5 + .../build/html/common_2slicing_8h_source.html | 83 +- docs/build/html/common_2ternary_8h.html | 65 +- .../build/html/common_2ternary_8h_source.html | 400 +- docs/build/html/common_2unary_8h.html | 65 +- docs/build/html/common_2unary_8h_source.html | 129 +- docs/build/html/compile_8h.html | 69 +- docs/build/html/compile_8h.js | 15 + docs/build/html/compile_8h_source.html | 86 +- docs/build/html/compile__impl_8h.html | 84 +- docs/build/html/compile__impl_8h.js | 13 + docs/build/html/compile__impl_8h_source.html | 144 +- docs/build/html/compiled_8h.html | 75 +- docs/build/html/compiled_8h.js | 13 + docs/build/html/compiled_8h_source.html | 206 +- docs/build/html/compiled__preamble_8h.html | 65 +- docs/build/html/compiled__preamble_8h.js | 4 + .../html/compiled__preamble_8h_source.html | 65 +- docs/build/html/conv_2loader_8h.html | 65 +- docs/build/html/conv_2loader_8h_source.html | 65 +- docs/build/html/conv_2params_8h.html | 65 +- docs/build/html/conv_2params_8h.js | 7 + docs/build/html/conv_2params_8h_source.html | 77 +- docs/build/html/conv_8h.html | 65 +- docs/build/html/conv_8h_source.html | 65 +- docs/build/html/cpp/ops.html | 140 +- docs/build/html/defines_8h.html | 77 +- docs/build/html/defines_8h.js | 11 + docs/build/html/defines_8h_source.html | 65 +- docs/build/html/dev/custom_metal_kernels.html | 73 +- docs/build/html/dev/extensions.html | 101 +- docs/build/html/dev/metal_debugger.html | 55 +- docs/build/html/dev/mlx_in_cpp.html | 1059 ++++ docs/build/html/device_8h.html | 65 +- docs/build/html/device_8h.js | 8 + docs/build/html/device_8h_source.html | 75 +- .../dir_1b634d20b746ceaa770a5379eca5f24a.html | 65 +- .../dir_1b634d20b746ceaa770a5379eca5f24a.js | 5 + .../dir_1d446c9bd3c99228254c9484e0bc5c06.html | 65 +- .../dir_1d446c9bd3c99228254c9484e0bc5c06.js | 6 + .../dir_2193406f5b2eae6fc53753d8a9a80df3.html | 65 +- .../dir_2193406f5b2eae6fc53753d8a9a80df3.js | 6 + .../dir_23833761034051b43bb6c170b56e2cce.html | 70 +- .../dir_23833761034051b43bb6c170b56e2cce.js | 8 + .../dir_4336740ec0075891704443b417fef6cb.html | 65 +- .../dir_4336740ec0075891704443b417fef6cb.js | 10 + .../dir_47795aa8999234f6f402f7e89d34d08e.html | 67 +- .../dir_47795aa8999234f6f402f7e89d34d08e.js | 8 + .../dir_5aea41cce495e77a0857a0aecf063e33.html | 65 +- .../dir_5aea41cce495e77a0857a0aecf063e33.js | 4 + .../dir_6379e541ea5051a09bc0e3fdd92fcd3b.html | 65 +- .../dir_6379e541ea5051a09bc0e3fdd92fcd3b.js | 5 + .../dir_6768c99e6145fb9510ccdb40db8ede25.html | 65 +- .../dir_6768c99e6145fb9510ccdb40db8ede25.js | 9 + .../dir_70a37effa88bcbd6b791977fa1e64356.html | 65 +- .../dir_70a37effa88bcbd6b791977fa1e64356.js | 38 + .../dir_76215a6c54e2b67053e723fc2395583c.html | 65 +- .../dir_76215a6c54e2b67053e723fc2395583c.js | 9 + .../dir_83367edb60e23ad59b1a493d8c883287.html | 65 +- .../dir_83367edb60e23ad59b1a493d8c883287.js | 4 + .../dir_86b95e7b1d0d6e25466bb9213752d32f.html | 65 +- .../dir_86b95e7b1d0d6e25466bb9213752d32f.js | 4 + .../dir_8c751ccfa9f494753d976761a9d60a84.html | 65 +- .../dir_8c751ccfa9f494753d976761a9d60a84.js | 5 + .../dir_938ab0ecf10b8b860ff766c820f665fd.html | 69 +- .../dir_938ab0ecf10b8b860ff766c820f665fd.js | 33 + .../dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html | 65 +- .../dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.js | 6 + .../dir_ad00dcd1517bfdbe01f68ec9b4eff877.html | 65 +- .../dir_ad00dcd1517bfdbe01f68ec9b4eff877.js | 4 + .../dir_ba4426224ef60f409462a2a12fa18f06.html | 65 +- .../dir_ba4426224ef60f409462a2a12fa18f06.js | 6 + .../dir_d0c977ea65824390717cdb7efc36c157.html | 65 +- .../dir_d0c977ea65824390717cdb7efc36c157.js | 19 + .../dir_d36f9e79442ec4bd53287b83bdefe7e5.html | 65 +- .../dir_d36f9e79442ec4bd53287b83bdefe7e5.js | 4 + .../dir_df9494e83ef22ae6150a0e080d9709ed.html | 65 +- .../dir_df9494e83ef22ae6150a0e080d9709ed.js | 8 + .../dir_e1756c7634b0c14aead026895ad71c6d.html | 65 +- .../dir_e1756c7634b0c14aead026895ad71c6d.js | 9 + .../dir_f149b24a1b5be11cd70151abe517e3f8.html | 67 +- .../dir_f149b24a1b5be11cd70151abe517e3f8.js | 20 + .../dir_f60cd69d27fd3faa641c79056fff0e2d.html | 65 +- .../dir_f60cd69d27fd3faa641c79056fff0e2d.js | 8 + .../dir_fb5e52e7ad5a84a63db2993d12f7610c.html | 65 +- .../dir_fb5e52e7ad5a84a63db2993d12f7610c.js | 4 + ...dir_fef8157d08ab8bc47d26a7b4e218df82.html} | 98 +- .../dir_fef8157d08ab8bc47d26a7b4e218df82.js | 4 + docs/build/html/distributed_2ops_8h.html | 69 +- docs/build/html/distributed_2ops_8h.js | 8 + .../html/distributed_2ops_8h_source.html | 76 +- .../html/distributed_2primitives_8h.html | 65 +- docs/build/html/distributed_2primitives_8h.js | 8 + .../distributed_2primitives_8h_source.html | 103 +- docs/build/html/distributed_8h.html | 67 +- docs/build/html/distributed_8h.js | 6 + docs/build/html/distributed_8h_source.html | 135 +- docs/build/html/distributed__impl_8h.html | 72 +- docs/build/html/distributed__impl_8h.js | 9 + .../html/distributed__impl_8h_source.html | 123 +- docs/build/html/doxygen.css | 13 +- docs/build/html/doxygen_crawl.html | 4125 ++++--------- docs/build/html/dtype_8h.html | 65 +- docs/build/html/dtype_8h.js | 33 + docs/build/html/dtype_8h_source.html | 175 +- docs/build/html/einsum_8h.html | 65 +- docs/build/html/einsum_8h.js | 5 + docs/build/html/einsum_8h_source.html | 69 +- docs/build/html/erf_8h.html | 65 +- docs/build/html/erf_8h.js | 5 + docs/build/html/erf_8h_source.html | 72 +- docs/build/html/event_8h.html | 65 +- docs/build/html/event_8h.js | 4 + docs/build/html/event_8h_source.html | 68 +- .../html/examples/linear_regression.html | 63 +- docs/build/html/examples/llama-inference.html | 91 +- docs/build/html/examples/mlp.html | 75 +- docs/build/html/expm1f_8h.html | 65 +- docs/build/html/expm1f_8h.js | 5 + docs/build/html/expm1f_8h_source.html | 87 +- docs/build/html/export_8h.html | 163 + docs/build/html/export_8h.js | 12 + docs/build/html/export_8h_source.html | 184 + docs/build/html/export__impl_8h.html | 139 + docs/build/html/export__impl_8h.js | 5 + docs/build/html/export__impl_8h_source.html | 218 + docs/build/html/fast_8h.html | 73 +- docs/build/html/fast_8h.js | 13 + docs/build/html/fast_8h_source.html | 173 +- docs/build/html/fast__primitives_8h.html | 65 +- docs/build/html/fast__primitives_8h.js | 13 + .../html/fast__primitives_8h_source.html | 672 ++- docs/build/html/fft_8h.html | 113 +- docs/build/html/fft_8h.js | 31 + docs/build/html/fft_8h_source.html | 202 +- docs/build/html/files.html | 346 +- docs/build/html/files_dup.js | 4 + docs/build/html/fp16_8h.html | 94 +- docs/build/html/fp16_8h.js | 174 + docs/build/html/fp16_8h_source.html | 79 +- docs/build/html/functions.html | 58 +- docs/build/html/functions_a.html | 60 +- docs/build/html/functions_b.html | 72 +- docs/build/html/functions_c.html | 67 +- docs/build/html/functions_d.html | 70 +- docs/build/html/functions_dup.js | 29 + docs/build/html/functions_e.html | 71 +- docs/build/html/functions_enum.html | 58 +- docs/build/html/functions_eval.html | 58 +- docs/build/html/functions_f.html | 68 +- docs/build/html/functions_func.html | 58 +- docs/build/html/functions_func.js | 28 + docs/build/html/functions_func_a.html | 60 +- docs/build/html/functions_func_b.html | 62 +- docs/build/html/functions_func_c.html | 65 +- docs/build/html/functions_func_d.html | 65 +- docs/build/html/functions_func_e.html | 65 +- docs/build/html/functions_func_f.html | 61 +- docs/build/html/functions_func_g.html | 65 +- docs/build/html/functions_func_h.html | 58 +- docs/build/html/functions_func_i.html | 67 +- docs/build/html/functions_func_j.html | 60 +- docs/build/html/functions_func_k.html | 58 +- docs/build/html/functions_func_l.html | 68 +- docs/build/html/functions_func_m.html | 64 +- docs/build/html/functions_func_n.html | 60 +- docs/build/html/functions_func_o.html | 67 +- docs/build/html/functions_func_p.html | 64 +- docs/build/html/functions_func_q.html | 58 +- docs/build/html/functions_func_r.html | 75 +- docs/build/html/functions_func_s.html | 98 +- docs/build/html/functions_func_t.html | 58 +- docs/build/html/functions_func_u.html | 62 +- docs/build/html/functions_func_v.html | 62 +- docs/build/html/functions_func_w.html | 60 +- docs/build/html/functions_func_~.html | 62 +- docs/build/html/functions_g.html | 65 +- docs/build/html/functions_h.html | 58 +- docs/build/html/functions_i.html | 76 +- docs/build/html/functions_j.html | 60 +- docs/build/html/functions_k.html | 70 +- docs/build/html/functions_l.html | 74 +- docs/build/html/functions_m.html | 74 +- docs/build/html/functions_n.html | 63 +- docs/build/html/functions_o.html | 74 +- docs/build/html/functions_p.html | 64 +- docs/build/html/functions_q.html | 60 +- docs/build/html/functions_r.html | 77 +- docs/build/html/functions_rela.html | 60 +- docs/build/html/functions_s.html | 103 +- docs/build/html/functions_t.html | 61 +- docs/build/html/functions_type.html | 80 +- docs/build/html/functions_u.html | 62 +- docs/build/html/functions_v.html | 70 +- docs/build/html/functions_vars.html | 58 +- docs/build/html/functions_vars.js | 26 + docs/build/html/functions_vars_b.html | 68 +- docs/build/html/functions_vars_c.html | 58 +- docs/build/html/functions_vars_d.html | 62 +- docs/build/html/functions_vars_e.html | 61 +- docs/build/html/functions_vars_f.html | 63 +- docs/build/html/functions_vars_g.html | 58 +- docs/build/html/functions_vars_h.html | 58 +- docs/build/html/functions_vars_i.html | 66 +- docs/build/html/functions_vars_j.html | 58 +- docs/build/html/functions_vars_k.html | 70 +- docs/build/html/functions_vars_l.html | 60 +- docs/build/html/functions_vars_m.html | 62 +- docs/build/html/functions_vars_n.html | 61 +- docs/build/html/functions_vars_o.html | 65 +- docs/build/html/functions_vars_p.html | 58 +- docs/build/html/functions_vars_q.html | 60 +- docs/build/html/functions_vars_r.html | 58 +- docs/build/html/functions_vars_s.html | 63 +- docs/build/html/functions_vars_t.html | 59 +- docs/build/html/functions_vars_v.html | 66 +- docs/build/html/functions_vars_w.html | 60 +- docs/build/html/functions_vars_x.html | 58 +- docs/build/html/functions_w.html | 62 +- docs/build/html/functions_x.html | 58 +- docs/build/html/functions_~.html | 62 +- docs/build/html/gather_8h.html | 79 +- docs/build/html/gather_8h.js | 4 + docs/build/html/gather_8h_source.html | 77 +- docs/build/html/gemm_2loader_8h.html | 65 +- docs/build/html/gemm_2loader_8h.js | 5 + docs/build/html/gemm_2loader_8h_source.html | 88 +- docs/build/html/gemm_2mma_8h.html | 69 +- docs/build/html/gemm_2mma_8h.js | 8 + docs/build/html/gemm_2mma_8h_source.html | 270 +- docs/build/html/gemm_2params_8h.html | 65 +- docs/build/html/gemm_2params_8h.js | 6 + docs/build/html/gemm_2params_8h_source.html | 86 +- docs/build/html/gemm_8h.html | 65 +- docs/build/html/gemm_8h.js | 5 + docs/build/html/gemm_8h_source.html | 93 +- docs/build/html/genindex.html | 103 +- docs/build/html/gguf_8h.html | 69 +- docs/build/html/gguf_8h.js | 5 + docs/build/html/gguf_8h_source.html | 70 +- docs/build/html/globals.html | 58 +- docs/build/html/globals_a.html | 60 +- docs/build/html/globals_b.html | 81 +- docs/build/html/globals_c.html | 70 +- docs/build/html/globals_d.html | 58 +- docs/build/html/globals_defs.html | 63 +- docs/build/html/globals_dup.js | 26 + docs/build/html/globals_e.html | 72 +- docs/build/html/globals_f.html | 59 +- docs/build/html/globals_func.html | 60 +- docs/build/html/globals_func.js | 22 + docs/build/html/globals_func_b.html | 80 +- docs/build/html/globals_func_c.html | 70 +- docs/build/html/globals_func_d.html | 58 +- docs/build/html/globals_func_e.html | 72 +- docs/build/html/globals_func_f.html | 58 +- docs/build/html/globals_func_g.html | 66 +- docs/build/html/globals_func_h.html | 58 +- docs/build/html/globals_func_i.html | 58 +- docs/build/html/globals_func_l.html | 58 +- docs/build/html/globals_func_m.html | 60 +- docs/build/html/globals_func_o.html | 58 +- docs/build/html/globals_func_p.html | 58 +- docs/build/html/globals_func_q.html | 72 +- docs/build/html/globals_func_r.html | 64 +- docs/build/html/globals_func_s.html | 64 +- docs/build/html/globals_func_t.html | 66 +- docs/build/html/globals_func_u.html | 60 +- docs/build/html/globals_func_w.html | 58 +- docs/build/html/globals_g.html | 66 +- docs/build/html/globals_h.html | 59 +- docs/build/html/globals_i.html | 58 +- docs/build/html/globals_j.html | 58 +- docs/build/html/globals_l.html | 58 +- docs/build/html/globals_m.html | 60 +- docs/build/html/globals_n.html | 59 +- docs/build/html/globals_o.html | 60 +- docs/build/html/globals_p.html | 59 +- docs/build/html/globals_q.html | 72 +- docs/build/html/globals_r.html | 64 +- docs/build/html/globals_s.html | 64 +- docs/build/html/globals_t.html | 66 +- docs/build/html/globals_type.html | 58 +- docs/build/html/globals_u.html | 61 +- docs/build/html/globals_vars.html | 85 +- docs/build/html/globals_w.html | 58 +- docs/build/html/globals_z.html | 58 +- docs/build/html/graph__utils_8h.html | 79 +- docs/build/html/graph__utils_8h.js | 12 + docs/build/html/graph__utils_8h_source.html | 155 +- docs/build/html/group__ops.html | 603 +- docs/build/html/group__ops.js | 317 + docs/build/html/half__types_8h.html | 89 +- docs/build/html/half__types_8h.js | 16 + docs/build/html/half__types_8h_source.html | 72 +- docs/build/html/hierarchy.html | 857 +-- docs/build/html/hierarchy.js | 473 ++ docs/build/html/includes_8h.html | 65 +- docs/build/html/includes_8h.js | 31 + docs/build/html/includes_8h_source.html | 65 +- docs/build/html/index.html | 56 +- docs/build/html/install.html | 69 +- docs/build/html/integral__constant_8h.html | 97 +- docs/build/html/integral__constant_8h.js | 26 + .../html/integral__constant_8h_source.html | 99 +- docs/build/html/io_2load_8h.html | 92 +- docs/build/html/io_2load_8h.js | 9 + docs/build/html/io_2load_8h_source.html | 441 +- docs/build/html/io_8h.html | 65 +- docs/build/html/io_8h.js | 16 + docs/build/html/io_8h_source.html | 82 +- docs/build/html/jit_2gemv__masked_8h.html | 73 +- docs/build/html/jit_2gemv__masked_8h.js | 4 + .../html/jit_2gemv__masked_8h_source.html | 71 +- docs/build/html/jit_2indexing_8h.html | 69 +- docs/build/html/jit_2indexing_8h.js | 5 + docs/build/html/jit_2indexing_8h_source.html | 75 +- docs/build/html/jit_2softmax_8h.html | 67 +- docs/build/html/jit_2softmax_8h.js | 4 + docs/build/html/jit_2softmax_8h_source.html | 65 +- docs/build/html/jit_2steel__conv_8h.html | 69 +- docs/build/html/jit_2steel__conv_8h.js | 5 + .../html/jit_2steel__conv_8h_source.html | 65 +- docs/build/html/jit__compiler_8h.html | 137 + docs/build/html/jit__compiler_8h.js | 4 + docs/build/html/jit__compiler_8h_source.html | 144 + docs/build/html/kernels_2gemv__masked_8h.html | 105 +- docs/build/html/kernels_2gemv__masked_8h.js | 12 + .../html/kernels_2gemv__masked_8h_source.html | 122 +- docs/build/html/kernels_2indexing_8h.html | 69 +- docs/build/html/kernels_2indexing_8h.js | 5 + .../html/kernels_2indexing_8h_source.html | 69 +- docs/build/html/kernels_2softmax_8h.html | 79 +- docs/build/html/kernels_2softmax_8h.js | 6 + .../html/kernels_2softmax_8h_source.html | 80 +- ...2steel_2conv_2kernels_2steel__conv_8h.html | 69 +- ...s_2steel_2conv_2kernels_2steel__conv_8h.js | 4 + ...2conv_2kernels_2steel__conv_8h_source.html | 65 +- docs/build/html/kernels_8h.html | 75 +- docs/build/html/kernels_8h.js | 26 + docs/build/html/kernels_8h_source.html | 420 +- docs/build/html/lapack_8h.html | 72 +- docs/build/html/lapack_8h.js | 4 + docs/build/html/lapack_8h_source.html | 112 +- docs/build/html/limits_8h.html | 142 + docs/build/html/limits_8h.js | 8 + docs/build/html/limits_8h_source.html | 214 + docs/build/html/linalg_8h.html | 65 +- docs/build/html/linalg_8h.js | 19 + docs/build/html/linalg_8h_source.html | 73 +- docs/build/html/loader__channel__l_8h.html | 65 +- docs/build/html/loader__channel__l_8h.js | 6 + .../html/loader__channel__l_8h_source.html | 193 +- docs/build/html/loader__channel__n_8h.html | 73 +- docs/build/html/loader__channel__n_8h.js | 10 + .../html/loader__channel__n_8h_source.html | 195 +- docs/build/html/loader__general_8h.html | 65 +- docs/build/html/loader__general_8h.js | 5 + .../build/html/loader__general_8h_source.html | 147 +- docs/build/html/matmul_8h.html | 73 +- docs/build/html/matmul_8h.js | 5 + docs/build/html/matmul_8h_source.html | 93 +- docs/build/html/menu.js | 134 - docs/build/html/menudata.js | 285 - docs/build/html/metal_2binary_8h.html | 73 +- docs/build/html/metal_2binary_8h.js | 7 + docs/build/html/metal_2binary_8h_source.html | 76 +- docs/build/html/metal_2copy_8h.html | 78 +- docs/build/html/metal_2copy_8h.js | 9 + docs/build/html/metal_2copy_8h_source.html | 138 +- docs/build/html/metal_2jit_2arange_8h.html | 67 +- docs/build/html/metal_2jit_2arange_8h.js | 4 + .../html/metal_2jit_2arange_8h_source.html | 65 +- .../build/html/metal_2kernels_2arange_8h.html | 69 +- docs/build/html/metal_2kernels_2arange_8h.js | 4 + .../metal_2kernels_2arange_8h_source.html | 65 +- .../build/html/metal_2kernels_2binary_8h.html | 157 +- docs/build/html/metal_2kernels_2binary_8h.js | 14 + .../metal_2kernels_2binary_8h_source.html | 133 +- .../html/metal_2kernels_2binary__two_8h.html | 157 +- .../html/metal_2kernels_2binary__two_8h.js | 14 + ...metal_2kernels_2binary__two_8h_source.html | 133 +- docs/build/html/metal_2kernels_2copy_8h.html | 327 +- docs/build/html/metal_2kernels_2copy_8h.js | 19 + .../html/metal_2kernels_2copy_8h_source.html | 188 +- .../html/metal_2kernels_2hadamard_8h.html | 73 +- .../build/html/metal_2kernels_2hadamard_8h.js | 6 + .../metal_2kernels_2hadamard_8h_source.html | 80 +- .../build/html/metal_2kernels_2reduce_8h.html | 65 +- .../metal_2kernels_2reduce_8h_source.html | 65 +- .../html/metal_2kernels_2ternary_8h.html | 145 +- docs/build/html/metal_2kernels_2ternary_8h.js | 9 + .../metal_2kernels_2ternary_8h_source.html | 143 +- docs/build/html/metal_2kernels_2unary_8h.html | 87 +- docs/build/html/metal_2kernels_2unary_8h.js | 6 + .../html/metal_2kernels_2unary_8h_source.html | 79 +- docs/build/html/metal_2reduce_8h.html | 71 +- docs/build/html/metal_2reduce_8h.js | 7 + docs/build/html/metal_2reduce_8h_source.html | 69 +- docs/build/html/metal_2slicing_8h.html | 73 +- docs/build/html/metal_2slicing_8h.js | 6 + docs/build/html/metal_2slicing_8h_source.html | 84 +- docs/build/html/metal_2ternary_8h.html | 69 +- docs/build/html/metal_2ternary_8h.js | 5 + docs/build/html/metal_2ternary_8h_source.html | 72 +- docs/build/html/metal_2unary_8h.html | 69 +- docs/build/html/metal_2unary_8h.js | 5 + docs/build/html/metal_2unary_8h_source.html | 72 +- docs/build/html/metal_8h.html | 65 +- docs/build/html/metal_8h.js | 15 + docs/build/html/metal_8h_source.html | 69 +- docs/build/html/metal__impl_8h.html | 65 +- docs/build/html/metal__impl_8h.js | 7 + docs/build/html/metal__impl_8h_source.html | 67 +- docs/build/html/mlx_8h.html | 66 +- docs/build/html/mlx_8h_source.html | 85 +- docs/build/html/mpi_8h.html | 149 + docs/build/html/mpi_8h.js | 6 + docs/build/html/mpi_8h_source.html | 138 + docs/build/html/namespacemembers.html | 60 +- docs/build/html/namespacemembers_b.html | 65 +- docs/build/html/namespacemembers_c.html | 78 +- docs/build/html/namespacemembers_d.html | 62 +- docs/build/html/namespacemembers_dup.js | 27 + docs/build/html/namespacemembers_e.html | 64 +- docs/build/html/namespacemembers_enum.html | 58 +- docs/build/html/namespacemembers_eval.html | 58 +- docs/build/html/namespacemembers_f.html | 64 +- docs/build/html/namespacemembers_func.html | 59 +- docs/build/html/namespacemembers_func.js | 27 + docs/build/html/namespacemembers_func_b.html | 62 +- docs/build/html/namespacemembers_func_c.html | 78 +- docs/build/html/namespacemembers_func_d.html | 62 +- docs/build/html/namespacemembers_func_e.html | 64 +- docs/build/html/namespacemembers_func_f.html | 62 +- docs/build/html/namespacemembers_func_g.html | 67 +- docs/build/html/namespacemembers_func_h.html | 58 +- docs/build/html/namespacemembers_func_i.html | 74 +- docs/build/html/namespacemembers_func_j.html | 58 +- docs/build/html/namespacemembers_func_k.html | 59 +- docs/build/html/namespacemembers_func_l.html | 60 +- docs/build/html/namespacemembers_func_m.html | 62 +- docs/build/html/namespacemembers_func_n.html | 64 +- docs/build/html/namespacemembers_func_o.html | 58 +- docs/build/html/namespacemembers_func_p.html | 67 +- docs/build/html/namespacemembers_func_q.html | 58 +- docs/build/html/namespacemembers_func_r.html | 75 +- docs/build/html/namespacemembers_func_s.html | 69 +- docs/build/html/namespacemembers_func_t.html | 60 +- docs/build/html/namespacemembers_func_u.html | 61 +- docs/build/html/namespacemembers_func_v.html | 58 +- docs/build/html/namespacemembers_func_w.html | 58 +- docs/build/html/namespacemembers_func_z.html | 58 +- docs/build/html/namespacemembers_g.html | 69 +- docs/build/html/namespacemembers_h.html | 58 +- docs/build/html/namespacemembers_i.html | 74 +- docs/build/html/namespacemembers_j.html | 58 +- docs/build/html/namespacemembers_k.html | 60 +- docs/build/html/namespacemembers_l.html | 60 +- docs/build/html/namespacemembers_m.html | 64 +- docs/build/html/namespacemembers_n.html | 64 +- docs/build/html/namespacemembers_o.html | 58 +- docs/build/html/namespacemembers_p.html | 68 +- docs/build/html/namespacemembers_q.html | 58 +- docs/build/html/namespacemembers_r.html | 75 +- docs/build/html/namespacemembers_s.html | 78 +- docs/build/html/namespacemembers_t.html | 60 +- docs/build/html/namespacemembers_type.html | 126 +- docs/build/html/namespacemembers_u.html | 61 +- docs/build/html/namespacemembers_v.html | 58 +- docs/build/html/namespacemembers_vars.html | 63 +- docs/build/html/namespacemembers_w.html | 58 +- docs/build/html/namespacemembers_z.html | 58 +- docs/build/html/namespacemetal.html | 73 +- docs/build/html/namespacemetal.js | 192 + docs/build/html/namespacemetal_1_1fast.html | 65 +- .../build/html/namespacemetal_1_1precise.html | 65 +- docs/build/html/namespacemlx.html | 61 +- docs/build/html/namespacemlx.js | 5 + docs/build/html/namespacemlx_1_1core.html | 2480 +++++--- docs/build/html/namespacemlx_1_1core.js | 1122 ++++ .../namespacemlx_1_1core_1_1allocator.html | 65 +- .../html/namespacemlx_1_1core_1_1allocator.js | 10 + .../html/namespacemlx_1_1core_1_1detail.html | 327 +- .../html/namespacemlx_1_1core_1_1detail.js | 83 + .../namespacemlx_1_1core_1_1distributed.html | 77 +- .../namespacemlx_1_1core_1_1distributed.js | 22 + ...emlx_1_1core_1_1distributed_1_1detail.html | 72 +- ...acemlx_1_1core_1_1distributed_1_1detail.js | 9 + ...pacemlx_1_1core_1_1distributed_1_1mpi.html | 184 + .../html/namespacemlx_1_1core_1_1env.html | 69 +- .../html/namespacemlx_1_1core_1_1fast.html | 134 +- .../html/namespacemlx_1_1core_1_1fast.js | 23 + .../html/namespacemlx_1_1core_1_1fft.html | 705 +-- .../html/namespacemlx_1_1core_1_1io.html | 65 +- docs/build/html/namespacemlx_1_1core_1_1io.js | 8 + .../html/namespacemlx_1_1core_1_1linalg.html | 71 +- .../html/namespacemlx_1_1core_1_1metal.html | 69 +- .../html/namespacemlx_1_1core_1_1metal.js | 58 + .../html/namespacemlx_1_1core_1_1random.html | 445 +- .../html/namespacemlx_1_1core_1_1random.js | 39 + .../namespacemlx_1_1core_1_1scheduler.html | 79 +- .../html/namespacemlx_1_1core_1_1scheduler.js | 11 + docs/build/html/namespacemlx_1_1steel.html | 171 +- docs/build/html/namespacemlx_1_1steel.js | 61 + docs/build/html/namespacepocketfft.html | 643 +- docs/build/html/namespacepocketfft.js | 16 + .../html/namespacepocketfft_1_1detail.html | 229 +- .../html/namespacepocketfft_1_1detail.js | 73 + ...spacepocketfft_1_1detail_1_1threading.html | 83 +- ...mespacepocketfft_1_1detail_1_1threading.js | 12 + docs/build/html/namespaces.html | 83 +- docs/build/html/namespaces_dup.js | 6 + docs/build/html/navtree.js | 483 ++ docs/build/html/navtreedata.js | 105 + docs/build/html/navtreeindex0.js | 253 + docs/build/html/navtreeindex1.js | 253 + docs/build/html/navtreeindex10.js | 253 + docs/build/html/navtreeindex11.js | 253 + docs/build/html/navtreeindex12.js | 253 + docs/build/html/navtreeindex13.js | 253 + docs/build/html/navtreeindex14.js | 253 + docs/build/html/navtreeindex15.js | 253 + docs/build/html/navtreeindex16.js | 253 + docs/build/html/navtreeindex17.js | 253 + docs/build/html/navtreeindex18.js | 253 + docs/build/html/navtreeindex19.js | 253 + docs/build/html/navtreeindex2.js | 253 + docs/build/html/navtreeindex20.js | 253 + docs/build/html/navtreeindex21.js | 253 + docs/build/html/navtreeindex22.js | 253 + docs/build/html/navtreeindex23.js | 253 + docs/build/html/navtreeindex24.js | 253 + docs/build/html/navtreeindex25.js | 253 + docs/build/html/navtreeindex26.js | 253 + docs/build/html/navtreeindex27.js | 253 + docs/build/html/navtreeindex28.js | 253 + docs/build/html/navtreeindex29.js | 253 + docs/build/html/navtreeindex3.js | 253 + docs/build/html/navtreeindex30.js | 253 + docs/build/html/navtreeindex31.js | 253 + docs/build/html/navtreeindex32.js | 159 + docs/build/html/navtreeindex4.js | 253 + docs/build/html/navtreeindex5.js | 253 + docs/build/html/navtreeindex6.js | 253 + docs/build/html/navtreeindex7.js | 253 + docs/build/html/navtreeindex8.js | 253 + docs/build/html/navtreeindex9.js | 253 + docs/build/html/objects.inv | Bin 26722 -> 27292 bytes docs/build/html/ops_8h.html | 197 +- docs/build/html/ops_8h.js | 317 + docs/build/html/ops_8h_source.html | 2304 ++++---- docs/build/html/pocketfft_8h.html | 177 +- docs/build/html/pocketfft_8h.js | 112 + docs/build/html/pocketfft_8h_source.html | 622 +- docs/build/html/primitives_8h.html | 79 +- docs/build/html/primitives_8h.js | 115 + docs/build/html/primitives_8h_source.html | 5195 +++++++++-------- .../python/_autosummary/mlx.core.Device.html | 53 +- .../python/_autosummary/mlx.core.Dtype.html | 53 +- .../_autosummary/mlx.core.DtypeCategory.html | 53 +- .../python/_autosummary/mlx.core.abs.html | 53 +- .../python/_autosummary/mlx.core.add.html | 53 +- .../python/_autosummary/mlx.core.addmm.html | 53 +- .../python/_autosummary/mlx.core.all.html | 53 +- .../_autosummary/mlx.core.allclose.html | 53 +- .../python/_autosummary/mlx.core.any.html | 53 +- .../python/_autosummary/mlx.core.arange.html | 53 +- .../python/_autosummary/mlx.core.arccos.html | 53 +- .../python/_autosummary/mlx.core.arccosh.html | 53 +- .../python/_autosummary/mlx.core.arcsin.html | 53 +- .../python/_autosummary/mlx.core.arcsinh.html | 53 +- .../python/_autosummary/mlx.core.arctan.html | 53 +- .../python/_autosummary/mlx.core.arctan2.html | 53 +- .../python/_autosummary/mlx.core.arctanh.html | 53 +- .../python/_autosummary/mlx.core.argmax.html | 53 +- .../python/_autosummary/mlx.core.argmin.html | 53 +- .../_autosummary/mlx.core.argpartition.html | 53 +- .../python/_autosummary/mlx.core.argsort.html | 53 +- .../python/_autosummary/mlx.core.array.T.html | 53 +- .../_autosummary/mlx.core.array.abs.html | 53 +- .../_autosummary/mlx.core.array.all.html | 53 +- .../_autosummary/mlx.core.array.any.html | 53 +- .../_autosummary/mlx.core.array.argmax.html | 53 +- .../_autosummary/mlx.core.array.argmin.html | 53 +- .../_autosummary/mlx.core.array.astype.html | 53 +- .../_autosummary/mlx.core.array.at.html | 53 +- .../_autosummary/mlx.core.array.conj.html | 53 +- .../_autosummary/mlx.core.array.cos.html | 53 +- .../_autosummary/mlx.core.array.cummax.html | 53 +- .../_autosummary/mlx.core.array.cummin.html | 53 +- .../_autosummary/mlx.core.array.cumprod.html | 53 +- .../_autosummary/mlx.core.array.cumsum.html | 53 +- .../_autosummary/mlx.core.array.diag.html | 53 +- .../_autosummary/mlx.core.array.diagonal.html | 53 +- .../_autosummary/mlx.core.array.dtype.html | 53 +- .../_autosummary/mlx.core.array.exp.html | 53 +- .../_autosummary/mlx.core.array.flatten.html | 53 +- .../python/_autosummary/mlx.core.array.html | 55 +- .../_autosummary/mlx.core.array.item.html | 53 +- .../_autosummary/mlx.core.array.itemsize.html | 53 +- .../_autosummary/mlx.core.array.log.html | 53 +- .../_autosummary/mlx.core.array.log10.html | 53 +- .../_autosummary/mlx.core.array.log1p.html | 53 +- .../_autosummary/mlx.core.array.log2.html | 53 +- .../mlx.core.array.logsumexp.html | 53 +- .../_autosummary/mlx.core.array.max.html | 53 +- .../_autosummary/mlx.core.array.mean.html | 53 +- .../_autosummary/mlx.core.array.min.html | 53 +- .../_autosummary/mlx.core.array.moveaxis.html | 53 +- .../_autosummary/mlx.core.array.nbytes.html | 53 +- .../_autosummary/mlx.core.array.ndim.html | 53 +- .../_autosummary/mlx.core.array.prod.html | 53 +- .../mlx.core.array.reciprocal.html | 53 +- .../_autosummary/mlx.core.array.reshape.html | 53 +- .../_autosummary/mlx.core.array.round.html | 53 +- .../_autosummary/mlx.core.array.rsqrt.html | 53 +- .../_autosummary/mlx.core.array.shape.html | 53 +- .../_autosummary/mlx.core.array.sin.html | 53 +- .../_autosummary/mlx.core.array.size.html | 53 +- .../_autosummary/mlx.core.array.split.html | 53 +- .../_autosummary/mlx.core.array.sqrt.html | 53 +- .../_autosummary/mlx.core.array.square.html | 53 +- .../_autosummary/mlx.core.array.squeeze.html | 53 +- .../_autosummary/mlx.core.array.std.html | 53 +- .../_autosummary/mlx.core.array.sum.html | 53 +- .../_autosummary/mlx.core.array.swapaxes.html | 53 +- .../_autosummary/mlx.core.array.tolist.html | 53 +- .../mlx.core.array.transpose.html | 53 +- .../_autosummary/mlx.core.array.var.html | 53 +- .../_autosummary/mlx.core.array.view.html | 53 +- .../_autosummary/mlx.core.array_equal.html | 53 +- .../_autosummary/mlx.core.as_strided.html | 53 +- .../_autosummary/mlx.core.atleast_1d.html | 53 +- .../_autosummary/mlx.core.atleast_2d.html | 53 +- .../_autosummary/mlx.core.atleast_3d.html | 53 +- .../_autosummary/mlx.core.bitwise_and.html | 53 +- .../_autosummary/mlx.core.bitwise_or.html | 53 +- .../_autosummary/mlx.core.bitwise_xor.html | 53 +- .../mlx.core.block_masked_mm.html | 53 +- .../_autosummary/mlx.core.broadcast_to.html | 53 +- .../python/_autosummary/mlx.core.ceil.html | 53 +- .../python/_autosummary/mlx.core.clip.html | 53 +- .../python/_autosummary/mlx.core.compile.html | 53 +- .../_autosummary/mlx.core.concatenate.html | 53 +- .../python/_autosummary/mlx.core.conj.html | 53 +- .../_autosummary/mlx.core.conjugate.html | 53 +- .../python/_autosummary/mlx.core.conv1d.html | 53 +- .../python/_autosummary/mlx.core.conv2d.html | 53 +- .../python/_autosummary/mlx.core.conv3d.html | 53 +- .../_autosummary/mlx.core.conv_general.html | 53 +- .../mlx.core.conv_transpose1d.html | 53 +- .../mlx.core.conv_transpose2d.html | 53 +- .../mlx.core.conv_transpose3d.html | 53 +- .../_autosummary/mlx.core.convolve.html | 53 +- .../python/_autosummary/mlx.core.cos.html | 53 +- .../python/_autosummary/mlx.core.cosh.html | 53 +- .../python/_autosummary/mlx.core.cummax.html | 53 +- .../python/_autosummary/mlx.core.cummin.html | 53 +- .../python/_autosummary/mlx.core.cumprod.html | 53 +- .../python/_autosummary/mlx.core.cumsum.html | 53 +- .../mlx.core.custom_function.html | 91 +- .../_autosummary/mlx.core.default_device.html | 53 +- .../_autosummary/mlx.core.default_stream.html | 53 +- .../python/_autosummary/mlx.core.degrees.html | 53 +- .../_autosummary/mlx.core.dequantize.html | 53 +- .../python/_autosummary/mlx.core.diag.html | 53 +- .../_autosummary/mlx.core.diagonal.html | 53 +- .../mlx.core.disable_compile.html | 53 +- .../mlx.core.distributed.Group.html | 53 +- .../mlx.core.distributed.all_gather.html | 53 +- .../mlx.core.distributed.all_sum.html | 53 +- .../mlx.core.distributed.init.html | 53 +- .../mlx.core.distributed.is_available.html | 53 +- .../mlx.core.distributed.recv.html | 53 +- .../mlx.core.distributed.recv_like.html | 53 +- .../mlx.core.distributed.send.html | 55 +- .../python/_autosummary/mlx.core.divide.html | 53 +- .../python/_autosummary/mlx.core.divmod.html | 53 +- .../python/_autosummary/mlx.core.einsum.html | 53 +- .../_autosummary/mlx.core.einsum_path.html | 53 +- .../_autosummary/mlx.core.enable_compile.html | 53 +- .../python/_autosummary/mlx.core.equal.html | 53 +- .../python/_autosummary/mlx.core.erf.html | 53 +- .../python/_autosummary/mlx.core.erfinv.html | 53 +- .../python/_autosummary/mlx.core.eval.html | 53 +- .../python/_autosummary/mlx.core.exp.html | 53 +- .../_autosummary/mlx.core.expand_dims.html | 53 +- .../python/_autosummary/mlx.core.expm1.html | 53 +- .../mlx.core.export_function.html | 1027 ++++ .../_autosummary/mlx.core.export_to_dot.html | 1016 ++++ .../_autosummary/mlx.core.exporter.html | 1020 ++++ .../python/_autosummary/mlx.core.eye.html | 53 +- .../mlx.core.fast.layer_norm.html | 53 +- .../mlx.core.fast.metal_kernel.html | 55 +- .../_autosummary/mlx.core.fast.rms_norm.html | 53 +- .../_autosummary/mlx.core.fast.rope.html | 57 +- ...ore.fast.scaled_dot_product_attention.html | 61 +- .../python/_autosummary/mlx.core.fft.fft.html | 53 +- .../_autosummary/mlx.core.fft.fft2.html | 53 +- .../_autosummary/mlx.core.fft.fftn.html | 53 +- .../_autosummary/mlx.core.fft.ifft.html | 53 +- .../_autosummary/mlx.core.fft.ifft2.html | 53 +- .../_autosummary/mlx.core.fft.ifftn.html | 53 +- .../_autosummary/mlx.core.fft.irfft.html | 53 +- .../_autosummary/mlx.core.fft.irfft2.html | 53 +- .../_autosummary/mlx.core.fft.irfftn.html | 53 +- .../_autosummary/mlx.core.fft.rfft.html | 53 +- .../_autosummary/mlx.core.fft.rfft2.html | 53 +- .../_autosummary/mlx.core.fft.rfftn.html | 53 +- .../python/_autosummary/mlx.core.finfo.html | 1030 ++++ .../python/_autosummary/mlx.core.flatten.html | 53 +- .../python/_autosummary/mlx.core.floor.html | 53 +- .../_autosummary/mlx.core.floor_divide.html | 53 +- .../python/_autosummary/mlx.core.full.html | 53 +- .../_autosummary/mlx.core.gather_mm.html | 53 +- .../_autosummary/mlx.core.gather_qmm.html | 53 +- .../python/_autosummary/mlx.core.grad.html | 53 +- .../python/_autosummary/mlx.core.greater.html | 53 +- .../_autosummary/mlx.core.greater_equal.html | 53 +- .../mlx.core.hadamard_transform.html | 55 +- .../_autosummary/mlx.core.identity.html | 53 +- .../python/_autosummary/mlx.core.imag.html | 53 +- .../mlx.core.import_function.html | 1023 ++++ .../python/_autosummary/mlx.core.inner.html | 53 +- .../python/_autosummary/mlx.core.isclose.html | 53 +- .../_autosummary/mlx.core.isfinite.html | 53 +- .../python/_autosummary/mlx.core.isinf.html | 53 +- .../python/_autosummary/mlx.core.isnan.html | 53 +- .../_autosummary/mlx.core.isneginf.html | 53 +- .../_autosummary/mlx.core.isposinf.html | 59 +- .../_autosummary/mlx.core.issubdtype.html | 59 +- .../python/_autosummary/mlx.core.jvp.html | 53 +- .../python/_autosummary/mlx.core.kron.html | 1022 ++++ .../_autosummary/mlx.core.left_shift.html | 59 +- .../python/_autosummary/mlx.core.less.html | 53 +- .../_autosummary/mlx.core.less_equal.html | 53 +- .../mlx.core.linalg.cholesky.html | 53 +- .../mlx.core.linalg.cholesky_inv.html | 53 +- .../_autosummary/mlx.core.linalg.cross.html | 53 +- .../_autosummary/mlx.core.linalg.eigh.html | 53 +- .../mlx.core.linalg.eigvalsh.html | 53 +- .../_autosummary/mlx.core.linalg.inv.html | 53 +- .../_autosummary/mlx.core.linalg.norm.html | 57 +- .../_autosummary/mlx.core.linalg.qr.html | 53 +- .../_autosummary/mlx.core.linalg.svd.html | 53 +- .../_autosummary/mlx.core.linalg.tri_inv.html | 53 +- .../_autosummary/mlx.core.linspace.html | 53 +- .../python/_autosummary/mlx.core.load.html | 53 +- .../python/_autosummary/mlx.core.log.html | 53 +- .../python/_autosummary/mlx.core.log10.html | 53 +- .../python/_autosummary/mlx.core.log1p.html | 53 +- .../python/_autosummary/mlx.core.log2.html | 53 +- .../_autosummary/mlx.core.logaddexp.html | 53 +- .../_autosummary/mlx.core.logical_and.html | 53 +- .../_autosummary/mlx.core.logical_not.html | 53 +- .../_autosummary/mlx.core.logical_or.html | 53 +- .../_autosummary/mlx.core.logsumexp.html | 53 +- .../python/_autosummary/mlx.core.matmul.html | 53 +- .../python/_autosummary/mlx.core.max.html | 53 +- .../python/_autosummary/mlx.core.maximum.html | 53 +- .../python/_autosummary/mlx.core.mean.html | 53 +- .../_autosummary/mlx.core.meshgrid.html | 55 +- .../mlx.core.metal.clear_cache.html | 53 +- .../mlx.core.metal.device_info.html | 54 +- .../mlx.core.metal.get_active_memory.html | 53 +- .../mlx.core.metal.get_cache_memory.html | 53 +- .../mlx.core.metal.get_peak_memory.html | 53 +- .../mlx.core.metal.is_available.html | 53 +- .../mlx.core.metal.reset_peak_memory.html | 53 +- .../mlx.core.metal.set_cache_limit.html | 53 +- .../mlx.core.metal.set_memory_limit.html | 53 +- .../mlx.core.metal.set_wired_limit.html | 53 +- .../mlx.core.metal.start_capture.html | 53 +- .../mlx.core.metal.stop_capture.html | 53 +- .../python/_autosummary/mlx.core.min.html | 53 +- .../python/_autosummary/mlx.core.minimum.html | 53 +- .../_autosummary/mlx.core.moveaxis.html | 53 +- .../_autosummary/mlx.core.multiply.html | 53 +- .../_autosummary/mlx.core.nan_to_num.html | 53 +- .../_autosummary/mlx.core.negative.html | 53 +- .../_autosummary/mlx.core.new_stream.html | 53 +- .../_autosummary/mlx.core.not_equal.html | 53 +- .../python/_autosummary/mlx.core.ones.html | 53 +- .../_autosummary/mlx.core.ones_like.html | 53 +- .../python/_autosummary/mlx.core.outer.html | 53 +- .../python/_autosummary/mlx.core.pad.html | 53 +- .../_autosummary/mlx.core.partition.html | 53 +- .../python/_autosummary/mlx.core.power.html | 53 +- .../python/_autosummary/mlx.core.prod.html | 53 +- .../_autosummary/mlx.core.put_along_axis.html | 53 +- .../_autosummary/mlx.core.quantize.html | 53 +- .../mlx.core.quantized_matmul.html | 53 +- .../python/_autosummary/mlx.core.radians.html | 53 +- .../mlx.core.random.bernoulli.html | 53 +- .../mlx.core.random.categorical.html | 53 +- .../_autosummary/mlx.core.random.gumbel.html | 53 +- .../_autosummary/mlx.core.random.key.html | 53 +- .../_autosummary/mlx.core.random.laplace.html | 53 +- .../mlx.core.random.multivariate_normal.html | 53 +- .../_autosummary/mlx.core.random.normal.html | 53 +- .../mlx.core.random.permutation.html | 53 +- .../_autosummary/mlx.core.random.randint.html | 53 +- .../_autosummary/mlx.core.random.seed.html | 53 +- .../_autosummary/mlx.core.random.split.html | 53 +- .../mlx.core.random.truncated_normal.html | 53 +- .../_autosummary/mlx.core.random.uniform.html | 53 +- .../python/_autosummary/mlx.core.real.html | 53 +- .../_autosummary/mlx.core.reciprocal.html | 53 +- .../_autosummary/mlx.core.remainder.html | 53 +- .../python/_autosummary/mlx.core.repeat.html | 53 +- .../python/_autosummary/mlx.core.reshape.html | 53 +- .../_autosummary/mlx.core.right_shift.html | 53 +- .../python/_autosummary/mlx.core.roll.html | 53 +- .../python/_autosummary/mlx.core.round.html | 53 +- .../python/_autosummary/mlx.core.rsqrt.html | 53 +- .../python/_autosummary/mlx.core.save.html | 53 +- .../_autosummary/mlx.core.save_gguf.html | 53 +- .../mlx.core.save_safetensors.html | 53 +- .../python/_autosummary/mlx.core.savez.html | 63 +- .../mlx.core.savez_compressed.html | 57 +- .../mlx.core.set_default_device.html | 53 +- .../mlx.core.set_default_stream.html | 53 +- .../python/_autosummary/mlx.core.sigmoid.html | 53 +- .../python/_autosummary/mlx.core.sign.html | 53 +- .../python/_autosummary/mlx.core.sin.html | 53 +- .../python/_autosummary/mlx.core.sinh.html | 59 +- .../python/_autosummary/mlx.core.slice.html | 1021 ++++ .../_autosummary/mlx.core.slice_update.html | 1019 ++++ .../python/_autosummary/mlx.core.softmax.html | 59 +- .../python/_autosummary/mlx.core.sort.html | 53 +- .../python/_autosummary/mlx.core.split.html | 53 +- .../python/_autosummary/mlx.core.sqrt.html | 53 +- .../python/_autosummary/mlx.core.square.html | 53 +- .../python/_autosummary/mlx.core.squeeze.html | 53 +- .../python/_autosummary/mlx.core.stack.html | 53 +- .../python/_autosummary/mlx.core.std.html | 53 +- .../_autosummary/mlx.core.stop_gradient.html | 53 +- .../python/_autosummary/mlx.core.stream.html | 53 +- .../_autosummary/mlx.core.subtract.html | 53 +- .../python/_autosummary/mlx.core.sum.html | 53 +- .../_autosummary/mlx.core.swapaxes.html | 53 +- .../_autosummary/mlx.core.synchronize.html | 59 +- .../python/_autosummary/mlx.core.take.html | 53 +- .../mlx.core.take_along_axis.html | 53 +- .../python/_autosummary/mlx.core.tan.html | 53 +- .../python/_autosummary/mlx.core.tanh.html | 53 +- .../_autosummary/mlx.core.tensordot.html | 53 +- .../python/_autosummary/mlx.core.tile.html | 53 +- .../python/_autosummary/mlx.core.topk.html | 53 +- .../python/_autosummary/mlx.core.trace.html | 53 +- .../_autosummary/mlx.core.transpose.html | 53 +- .../python/_autosummary/mlx.core.tri.html | 53 +- .../python/_autosummary/mlx.core.tril.html | 53 +- .../python/_autosummary/mlx.core.triu.html | 59 +- .../_autosummary/mlx.core.unflatten.html | 1020 ++++ .../_autosummary/mlx.core.value_and_grad.html | 59 +- .../python/_autosummary/mlx.core.var.html | 59 +- .../python/_autosummary/mlx.core.view.html | 53 +- .../python/_autosummary/mlx.core.vjp.html | 53 +- .../python/_autosummary/mlx.core.vmap.html | 53 +- .../python/_autosummary/mlx.core.where.html | 53 +- .../python/_autosummary/mlx.core.zeros.html | 53 +- .../_autosummary/mlx.core.zeros_like.html | 53 +- .../python/_autosummary/mlx.nn.quantize.html | 53 +- .../_autosummary/mlx.nn.value_and_grad.html | 53 +- .../mlx.optimizers.clip_grad_norm.html | 53 +- .../_autosummary/mlx.utils.tree_flatten.html | 55 +- .../_autosummary/mlx.utils.tree_map.html | 57 +- .../mlx.utils.tree_map_with_path.html | 55 +- .../_autosummary/mlx.utils.tree_reduce.html | 55 +- .../mlx.utils.tree_unflatten.html | 55 +- .../python/_autosummary/stream_class.html | 53 +- docs/build/html/python/array.html | 53 +- docs/build/html/python/data_types.html | 56 +- .../html/python/devices_and_streams.html | 59 +- docs/build/html/python/distributed.html | 53 +- docs/build/html/python/export.html | 980 ++++ docs/build/html/python/fast.html | 53 +- docs/build/html/python/fft.html | 53 +- docs/build/html/python/linalg.html | 53 +- docs/build/html/python/metal.html | 53 +- docs/build/html/python/nn.html | 71 +- .../python/nn/_autosummary/mlx.nn.ALiBi.html | 53 +- .../nn/_autosummary/mlx.nn.AvgPool1d.html | 57 +- .../nn/_autosummary/mlx.nn.AvgPool2d.html | 57 +- .../nn/_autosummary/mlx.nn.AvgPool3d.html | 57 +- .../nn/_autosummary/mlx.nn.BatchNorm.html | 57 +- .../python/nn/_autosummary/mlx.nn.CELU.html | 53 +- .../python/nn/_autosummary/mlx.nn.Conv1d.html | 53 +- .../python/nn/_autosummary/mlx.nn.Conv2d.html | 53 +- .../python/nn/_autosummary/mlx.nn.Conv3d.html | 53 +- .../_autosummary/mlx.nn.ConvTranspose1d.html | 53 +- .../_autosummary/mlx.nn.ConvTranspose2d.html | 53 +- .../_autosummary/mlx.nn.ConvTranspose3d.html | 53 +- .../nn/_autosummary/mlx.nn.Dropout.html | 53 +- .../nn/_autosummary/mlx.nn.Dropout2d.html | 53 +- .../nn/_autosummary/mlx.nn.Dropout3d.html | 53 +- .../python/nn/_autosummary/mlx.nn.ELU.html | 53 +- .../nn/_autosummary/mlx.nn.Embedding.html | 53 +- .../python/nn/_autosummary/mlx.nn.GELU.html | 53 +- .../python/nn/_autosummary/mlx.nn.GLU.html | 53 +- .../python/nn/_autosummary/mlx.nn.GRU.html | 53 +- .../nn/_autosummary/mlx.nn.GroupNorm.html | 53 +- .../nn/_autosummary/mlx.nn.HardShrink.html | 53 +- .../nn/_autosummary/mlx.nn.HardTanh.html | 53 +- .../nn/_autosummary/mlx.nn.Hardswish.html | 53 +- .../nn/_autosummary/mlx.nn.InstanceNorm.html | 57 +- .../python/nn/_autosummary/mlx.nn.LSTM.html | 53 +- .../nn/_autosummary/mlx.nn.LayerNorm.html | 53 +- .../nn/_autosummary/mlx.nn.LeakyReLU.html | 53 +- .../python/nn/_autosummary/mlx.nn.Linear.html | 53 +- .../nn/_autosummary/mlx.nn.LogSigmoid.html | 53 +- .../nn/_autosummary/mlx.nn.LogSoftmax.html | 53 +- .../nn/_autosummary/mlx.nn.MaxPool1d.html | 57 +- .../nn/_autosummary/mlx.nn.MaxPool2d.html | 57 +- .../nn/_autosummary/mlx.nn.MaxPool3d.html | 57 +- .../python/nn/_autosummary/mlx.nn.Mish.html | 53 +- .../nn/_autosummary/mlx.nn.Module.apply.html | 53 +- .../mlx.nn.Module.apply_to_modules.html | 53 +- .../_autosummary/mlx.nn.Module.children.html | 53 +- .../nn/_autosummary/mlx.nn.Module.eval.html | 53 +- .../mlx.nn.Module.filter_and_map.html | 53 +- .../nn/_autosummary/mlx.nn.Module.freeze.html | 53 +- .../mlx.nn.Module.leaf_modules.html | 53 +- .../mlx.nn.Module.load_weights.html | 57 +- .../_autosummary/mlx.nn.Module.modules.html | 53 +- .../mlx.nn.Module.named_modules.html | 53 +- .../mlx.nn.Module.parameters.html | 53 +- .../mlx.nn.Module.save_weights.html | 53 +- .../_autosummary/mlx.nn.Module.set_dtype.html | 53 +- .../nn/_autosummary/mlx.nn.Module.state.html | 53 +- .../nn/_autosummary/mlx.nn.Module.train.html | 53 +- .../mlx.nn.Module.trainable_parameters.html | 53 +- .../_autosummary/mlx.nn.Module.training.html | 53 +- .../_autosummary/mlx.nn.Module.unfreeze.html | 53 +- .../nn/_autosummary/mlx.nn.Module.update.html | 53 +- .../mlx.nn.Module.update_modules.html | 53 +- .../mlx.nn.MultiHeadAttention.html | 53 +- .../python/nn/_autosummary/mlx.nn.PReLU.html | 53 +- .../mlx.nn.QuantizedEmbedding.html | 53 +- .../_autosummary/mlx.nn.QuantizedLinear.html | 53 +- .../nn/_autosummary/mlx.nn.RMSNorm.html | 53 +- .../python/nn/_autosummary/mlx.nn.RNN.html | 53 +- .../python/nn/_autosummary/mlx.nn.ReLU.html | 53 +- .../python/nn/_autosummary/mlx.nn.ReLU6.html | 53 +- .../python/nn/_autosummary/mlx.nn.RoPE.html | 53 +- .../python/nn/_autosummary/mlx.nn.SELU.html | 53 +- .../nn/_autosummary/mlx.nn.Sequential.html | 53 +- .../python/nn/_autosummary/mlx.nn.SiLU.html | 53 +- .../nn/_autosummary/mlx.nn.Sigmoid.html | 53 +- .../mlx.nn.SinusoidalPositionalEncoding.html | 53 +- .../nn/_autosummary/mlx.nn.Softmax.html | 53 +- .../nn/_autosummary/mlx.nn.Softmin.html | 53 +- .../nn/_autosummary/mlx.nn.Softplus.html | 53 +- .../nn/_autosummary/mlx.nn.Softshrink.html | 53 +- .../nn/_autosummary/mlx.nn.Softsign.html | 53 +- .../python/nn/_autosummary/mlx.nn.Step.html | 53 +- .../python/nn/_autosummary/mlx.nn.Tanh.html | 53 +- .../nn/_autosummary/mlx.nn.Transformer.html | 53 +- .../nn/_autosummary/mlx.nn.Upsample.html | 59 +- .../nn/_autosummary/mlx.nn.init.constant.html | 53 +- .../mlx.nn.init.glorot_normal.html | 53 +- .../mlx.nn.init.glorot_uniform.html | 53 +- .../_autosummary/mlx.nn.init.he_normal.html | 53 +- .../_autosummary/mlx.nn.init.he_uniform.html | 53 +- .../nn/_autosummary/mlx.nn.init.identity.html | 53 +- .../nn/_autosummary/mlx.nn.init.normal.html | 53 +- .../nn/_autosummary/mlx.nn.init.uniform.html | 53 +- .../_autosummary_functions/mlx.nn.celu.html | 53 +- .../nn/_autosummary_functions/mlx.nn.elu.html | 53 +- .../_autosummary_functions/mlx.nn.gelu.html | 53 +- .../mlx.nn.gelu_approx.html | 53 +- .../mlx.nn.gelu_fast_approx.html | 53 +- .../nn/_autosummary_functions/mlx.nn.glu.html | 53 +- .../mlx.nn.hard_shrink.html | 53 +- .../mlx.nn.hard_tanh.html | 53 +- .../mlx.nn.hardswish.html | 53 +- .../mlx.nn.leaky_relu.html | 53 +- .../mlx.nn.log_sigmoid.html | 53 +- .../mlx.nn.log_softmax.html | 53 +- .../mlx.nn.losses.binary_cross_entropy.html | 57 +- .../mlx.nn.losses.cosine_similarity_loss.html | 53 +- .../mlx.nn.losses.cross_entropy.html | 57 +- .../mlx.nn.losses.gaussian_nll_loss.html | 53 +- .../mlx.nn.losses.hinge_loss.html | 53 +- .../mlx.nn.losses.huber_loss.html | 53 +- .../mlx.nn.losses.kl_div_loss.html | 53 +- .../mlx.nn.losses.l1_loss.html | 53 +- .../mlx.nn.losses.log_cosh_loss.html | 53 +- .../mlx.nn.losses.margin_ranking_loss.html | 57 +- .../mlx.nn.losses.mse_loss.html | 53 +- .../mlx.nn.losses.nll_loss.html | 53 +- .../mlx.nn.losses.smooth_l1_loss.html | 53 +- .../mlx.nn.losses.triplet_loss.html | 53 +- .../_autosummary_functions/mlx.nn.mish.html | 53 +- .../_autosummary_functions/mlx.nn.prelu.html | 53 +- .../_autosummary_functions/mlx.nn.relu.html | 53 +- .../_autosummary_functions/mlx.nn.relu6.html | 53 +- .../_autosummary_functions/mlx.nn.selu.html | 53 +- .../mlx.nn.sigmoid.html | 53 +- .../_autosummary_functions/mlx.nn.silu.html | 53 +- .../mlx.nn.softmax.html | 53 +- .../mlx.nn.softmin.html | 53 +- .../mlx.nn.softplus.html | 53 +- .../mlx.nn.softshrink.html | 53 +- .../_autosummary_functions/mlx.nn.step.html | 53 +- .../_autosummary_functions/mlx.nn.tanh.html | 53 +- docs/build/html/python/nn/functions.html | 53 +- docs/build/html/python/nn/init.html | 59 +- docs/build/html/python/nn/layers.html | 53 +- docs/build/html/python/nn/losses.html | 53 +- docs/build/html/python/nn/module.html | 63 +- docs/build/html/python/ops.html | 229 +- docs/build/html/python/optimizers.html | 59 +- .../_autosummary/mlx.optimizers.AdaDelta.html | 53 +- .../mlx.optimizers.Adafactor.html | 53 +- .../_autosummary/mlx.optimizers.Adagrad.html | 53 +- .../_autosummary/mlx.optimizers.Adam.html | 53 +- .../_autosummary/mlx.optimizers.AdamW.html | 53 +- .../_autosummary/mlx.optimizers.Adamax.html | 53 +- .../_autosummary/mlx.optimizers.Lion.html | 53 +- ....optimizers.Optimizer.apply_gradients.html | 53 +- .../mlx.optimizers.Optimizer.init.html | 53 +- .../mlx.optimizers.Optimizer.state.html | 53 +- .../mlx.optimizers.Optimizer.update.html | 53 +- .../_autosummary/mlx.optimizers.RMSprop.html | 53 +- .../_autosummary/mlx.optimizers.SGD.html | 53 +- .../mlx.optimizers.cosine_decay.html | 53 +- .../mlx.optimizers.exponential_decay.html | 53 +- .../mlx.optimizers.join_schedules.html | 53 +- .../mlx.optimizers.linear_schedule.html | 53 +- .../mlx.optimizers.step_decay.html | 53 +- .../python/optimizers/common_optimizers.html | 53 +- .../html/python/optimizers/optimizer.html | 53 +- .../html/python/optimizers/schedulers.html | 53 +- docs/build/html/python/random.html | 53 +- docs/build/html/python/transforms.html | 53 +- docs/build/html/python/tree_utils.html | 53 +- docs/build/html/quantized_8h.html | 441 +- docs/build/html/quantized_8h.js | 35 + docs/build/html/quantized_8h_source.html | 1850 +++--- docs/build/html/radix_8h.html | 65 +- docs/build/html/radix_8h.js | 17 + docs/build/html/radix_8h_source.html | 65 +- docs/build/html/random_8h.html | 177 +- docs/build/html/random_8h.js | 38 + docs/build/html/random_8h_source.html | 245 +- docs/build/html/readwrite_8h.html | 65 +- docs/build/html/readwrite_8h.js | 5 + docs/build/html/readwrite_8h_source.html | 349 +- docs/build/html/reduce__all_8h.html | 69 +- docs/build/html/reduce__all_8h.js | 4 + docs/build/html/reduce__all_8h_source.html | 78 +- docs/build/html/reduce__col_8h.html | 137 +- docs/build/html/reduce__col_8h.js | 7 + docs/build/html/reduce__col_8h_source.html | 156 +- docs/build/html/reduce__init_8h.html | 69 +- docs/build/html/reduce__init_8h.js | 4 + docs/build/html/reduce__init_8h_source.html | 65 +- docs/build/html/reduce__row_8h.html | 153 +- docs/build/html/reduce__row_8h.js | 11 + docs/build/html/reduce__row_8h_source.html | 211 +- docs/build/html/reduce__utils_8h.html | 65 +- docs/build/html/reduce__utils_8h_source.html | 65 +- docs/build/html/resident_8h.html | 65 +- docs/build/html/resident_8h.js | 4 + docs/build/html/resident_8h_source.html | 77 +- docs/build/html/scan_8h.html | 101 +- docs/build/html/scan_8h.js | 16 + docs/build/html/scan_8h_source.html | 124 +- docs/build/html/scatter_8h.html | 81 +- docs/build/html/scatter_8h.js | 4 + docs/build/html/scatter_8h_source.html | 93 +- docs/build/html/scheduler_8h.html | 69 +- docs/build/html/scheduler_8h.js | 11 + docs/build/html/scheduler_8h_source.html | 300 +- docs/build/html/sdpa__vector_8h.html | 146 +- docs/build/html/sdpa__vector_8h.js | 7 + docs/build/html/sdpa__vector_8h_source.html | 667 ++- docs/build/html/search.html | 53 +- docs/build/html/search/all_1.js | 226 +- docs/build/html/search/all_10.js | 137 +- docs/build/html/search/all_11.js | 16 +- docs/build/html/search/all_12.js | 53 +- docs/build/html/search/all_13.js | 386 +- docs/build/html/search/all_14.js | 53 +- docs/build/html/search/all_15.js | 23 +- docs/build/html/search/all_16.js | 10 +- docs/build/html/search/all_17.js | 4 +- docs/build/html/search/all_1a.js | 4 +- docs/build/html/search/all_2.js | 172 +- docs/build/html/search/all_3.js | 273 +- docs/build/html/search/all_4.js | 49 +- docs/build/html/search/all_5.js | 84 +- docs/build/html/search/all_6.js | 80 +- docs/build/html/search/all_7.js | 127 +- docs/build/html/search/all_8.js | 16 +- docs/build/html/search/all_9.js | 160 +- docs/build/html/search/all_a.js | 12 +- docs/build/html/search/all_b.js | 42 +- docs/build/html/search/all_c.js | 115 +- docs/build/html/search/all_d.js | 118 +- docs/build/html/search/all_e.js | 67 +- docs/build/html/search/all_f.js | 27 +- docs/build/html/search/classes_1.js | 2 +- docs/build/html/search/classes_10.js | 17 +- docs/build/html/search/classes_11.js | 23 +- docs/build/html/search/classes_12.js | 50 +- docs/build/html/search/classes_13.js | 46 +- docs/build/html/search/classes_14.js | 18 +- docs/build/html/search/classes_15.js | 6 +- docs/build/html/search/classes_16.js | 4 +- docs/build/html/search/classes_17.js | 4 + docs/build/html/search/classes_2.js | 36 +- docs/build/html/search/classes_3.js | 85 +- docs/build/html/search/classes_4.js | 4 +- docs/build/html/search/classes_5.js | 5 +- docs/build/html/search/classes_6.js | 11 +- docs/build/html/search/classes_7.js | 3 +- docs/build/html/search/classes_8.js | 3 +- docs/build/html/search/classes_9.js | 23 +- docs/build/html/search/classes_a.js | 4 +- docs/build/html/search/classes_b.js | 38 +- docs/build/html/search/classes_c.js | 54 +- docs/build/html/search/classes_d.js | 26 +- docs/build/html/search/classes_e.js | 12 +- docs/build/html/search/classes_f.js | 15 +- docs/build/html/search/defines_a.js | 20 +- docs/build/html/search/defines_b.js | 20 +- docs/build/html/search/defines_c.js | 3 +- docs/build/html/search/defines_d.js | 5 + docs/build/html/search/files_10.js | 25 +- docs/build/html/search/files_11.js | 22 +- docs/build/html/search/files_12.js | 10 +- docs/build/html/search/files_13.js | 6 + docs/build/html/search/files_4.js | 4 +- docs/build/html/search/files_9.js | 2 +- docs/build/html/search/files_a.js | 8 +- docs/build/html/search/files_b.js | 13 +- docs/build/html/search/files_c.js | 7 +- docs/build/html/search/files_d.js | 4 +- docs/build/html/search/files_e.js | 4 +- docs/build/html/search/files_f.js | 11 +- docs/build/html/search/functions_1.js | 161 +- docs/build/html/search/functions_10.js | 41 +- docs/build/html/search/functions_11.js | 14 +- docs/build/html/search/functions_12.js | 44 +- docs/build/html/search/functions_13.js | 238 +- docs/build/html/search/functions_14.js | 10 +- docs/build/html/search/functions_15.js | 11 +- docs/build/html/search/functions_16.js | 4 +- docs/build/html/search/functions_17.js | 2 +- docs/build/html/search/functions_19.js | 4 +- docs/build/html/search/functions_2.js | 36 +- docs/build/html/search/functions_3.js | 193 +- docs/build/html/search/functions_4.js | 53 +- docs/build/html/search/functions_5.js | 35 +- docs/build/html/search/functions_6.js | 49 +- docs/build/html/search/functions_7.js | 103 +- docs/build/html/search/functions_9.js | 75 +- docs/build/html/search/functions_a.js | 2 +- docs/build/html/search/functions_b.js | 3 +- docs/build/html/search/functions_c.js | 12 +- docs/build/html/search/functions_d.js | 14 +- docs/build/html/search/functions_e.js | 8 +- docs/build/html/search/functions_f.js | 13 +- docs/build/html/search/namespaces_0.js | 19 +- docs/build/html/search/related_0.js | 2 +- docs/build/html/search/related_1.js | 3 +- docs/build/html/search/related_2.js | 4 + docs/build/html/search/related_3.js | 5 + docs/build/html/search/search.css | 13 +- docs/build/html/search/searchdata.js | 10 +- docs/build/html/search/typedefs_0.js | 5 +- docs/build/html/search/typedefs_1.js | 2 +- docs/build/html/search/typedefs_2.js | 3 +- docs/build/html/search/typedefs_3.js | 4 +- docs/build/html/search/typedefs_4.js | 5 +- docs/build/html/search/typedefs_5.js | 6 +- docs/build/html/search/typedefs_6.js | 5 +- docs/build/html/search/typedefs_7.js | 4 +- docs/build/html/search/typedefs_8.js | 4 +- docs/build/html/search/typedefs_9.js | 10 +- docs/build/html/search/typedefs_b.js | 3 +- docs/build/html/search/typedefs_c.js | 3 +- docs/build/html/search/typedefs_d.js | 13 +- docs/build/html/search/typedefs_e.js | 2 +- docs/build/html/search/variables_1.js | 57 +- docs/build/html/search/variables_10.js | 2 +- docs/build/html/search/variables_12.js | 65 +- docs/build/html/search/variables_13.js | 5 +- docs/build/html/search/variables_14.js | 13 +- docs/build/html/search/variables_15.js | 6 +- docs/build/html/search/variables_16.js | 2 +- docs/build/html/search/variables_3.js | 14 +- docs/build/html/search/variables_4.js | 3 +- docs/build/html/search/variables_5.js | 11 +- docs/build/html/search/variables_6.js | 15 +- docs/build/html/search/variables_7.js | 9 +- docs/build/html/search/variables_8.js | 6 +- docs/build/html/search/variables_a.js | 26 +- docs/build/html/search/variables_b.js | 2 +- docs/build/html/search/variables_c.js | 4 +- docs/build/html/search/variables_d.js | 16 +- docs/build/html/search/variables_e.js | 17 +- docs/build/html/search/variables_f.js | 3 +- docs/build/html/searchindex.js | 2 +- docs/build/html/sort_8h.html | 113 +- docs/build/html/sort_8h.js | 17 + docs/build/html/sort_8h_source.html | 123 +- docs/build/html/steel_2defines_8h.html | 65 +- docs/build/html/steel_2defines_8h.js | 5 + docs/build/html/steel_2defines_8h_source.html | 65 +- docs/build/html/steel__attention_8h.html | 69 +- docs/build/html/steel__attention_8h.js | 13 + .../html/steel__attention_8h_source.html | 73 +- docs/build/html/steel__conv__general_8h.html | 69 +- docs/build/html/steel__conv__general_8h.js | 4 + .../html/steel__conv__general_8h_source.html | 65 +- docs/build/html/steel__gemm_8h.html | 81 +- docs/build/html/steel__gemm_8h.js | 8 + docs/build/html/steel__gemm_8h_source.html | 71 +- docs/build/html/steel__gemm__fused_8h.html | 81 +- docs/build/html/steel__gemm__fused_8h.js | 12 + .../html/steel__gemm__fused_8h_source.html | 728 +-- docs/build/html/steel__gemm__masked_8h.html | 93 +- docs/build/html/steel__gemm__masked_8h.js | 7 + .../html/steel__gemm__masked_8h_source.html | 122 +- docs/build/html/steel__gemm__splitk_8h.html | 77 +- docs/build/html/steel__gemm__splitk_8h.js | 6 + .../html/steel__gemm__splitk_8h_source.html | 74 +- docs/build/html/stream_8h.html | 68 +- docs/build/html/stream_8h.js | 12 + docs/build/html/stream_8h_source.html | 108 +- .../struct___m_l_x___b_float16-members.html | 60 +- .../html/struct___m_l_x___b_float16.html | 121 +- docs/build/html/struct___m_l_x___b_float16.js | 19 + ...b_float16_1_1bits__to__bfloat__struct.html | 65 +- docs/build/html/struct___no_mask-members.html | 60 +- docs/build/html/struct___no_mask.html | 77 +- docs/build/html/struct___no_mask.js | 12 + docs/build/html/struct_abs-members.html | 60 +- docs/build/html/struct_abs.html | 79 +- docs/build/html/struct_abs.js | 10 + docs/build/html/struct_add-members.html | 60 +- docs/build/html/struct_add.html | 67 +- docs/build/html/struct_add.js | 4 + docs/build/html/struct_and.html | 61 +- docs/build/html/struct_arc_cos-members.html | 60 +- docs/build/html/struct_arc_cos.html | 67 +- docs/build/html/struct_arc_cos.js | 4 + docs/build/html/struct_arc_cosh-members.html | 60 +- docs/build/html/struct_arc_cosh.html | 67 +- docs/build/html/struct_arc_cosh.js | 4 + docs/build/html/struct_arc_sin-members.html | 60 +- docs/build/html/struct_arc_sin.html | 67 +- docs/build/html/struct_arc_sin.js | 4 + docs/build/html/struct_arc_sinh-members.html | 60 +- docs/build/html/struct_arc_sinh.html | 67 +- docs/build/html/struct_arc_sinh.js | 4 + docs/build/html/struct_arc_tan-members.html | 60 +- docs/build/html/struct_arc_tan.html | 67 +- docs/build/html/struct_arc_tan.js | 4 + docs/build/html/struct_arc_tan2-members.html | 60 +- docs/build/html/struct_arc_tan2.html | 67 +- docs/build/html/struct_arc_tan2.js | 4 + docs/build/html/struct_arc_tanh-members.html | 60 +- docs/build/html/struct_arc_tanh.html | 67 +- docs/build/html/struct_arc_tanh.js | 4 + .../html/struct_bitwise_and-members.html | 60 +- docs/build/html/struct_bitwise_and.html | 67 +- docs/build/html/struct_bitwise_and.js | 4 + .../build/html/struct_bitwise_or-members.html | 60 +- docs/build/html/struct_bitwise_or.html | 67 +- docs/build/html/struct_bitwise_or.js | 4 + .../html/struct_bitwise_xor-members.html | 60 +- docs/build/html/struct_bitwise_xor.html | 67 +- docs/build/html/struct_bitwise_xor.js | 4 + .../html/struct_block_merge_sort-members.html | 60 +- docs/build/html/struct_block_merge_sort.html | 75 +- docs/build/html/struct_block_merge_sort.js | 7 + docs/build/html/struct_ceil-members.html | 60 +- docs/build/html/struct_ceil.html | 85 +- docs/build/html/struct_ceil.js | 13 + .../html/struct_conditional_type-members.html | 60 +- docs/build/html/struct_conditional_type.html | 63 +- docs/build/html/struct_conditional_type.js | 5 + ...3_01true_00_01_t_00_01_u_01_4-members.html | 101 - docs/build/html/struct_conjugate-members.html | 60 +- docs/build/html/struct_conjugate.html | 63 +- docs/build/html/struct_conjugate.js | 4 + docs/build/html/struct_cos-members.html | 60 +- docs/build/html/struct_cos.html | 69 +- docs/build/html/struct_cos.js | 5 + docs/build/html/struct_cosh-members.html | 60 +- docs/build/html/struct_cosh.html | 69 +- docs/build/html/struct_cosh.js | 5 + docs/build/html/struct_cum_max-members.html | 60 +- docs/build/html/struct_cum_max.html | 81 +- docs/build/html/struct_cum_max.js | 7 + docs/build/html/struct_cum_min-members.html | 60 +- docs/build/html/struct_cum_min.html | 81 +- docs/build/html/struct_cum_min.js | 7 + docs/build/html/struct_cum_prod.html | 61 +- docs/build/html/struct_cum_prod.js | 7 + .../html/struct_cum_prod_3_01bool_01_4.html | 227 - docs/build/html/struct_cum_sum.html | 61 +- docs/build/html/struct_div_mod-members.html | 60 +- docs/build/html/struct_div_mod.html | 67 +- docs/build/html/struct_div_mod.js | 4 + docs/build/html/struct_div_op-members.html | 60 +- docs/build/html/struct_div_op.html | 67 +- docs/build/html/struct_div_op.js | 4 + docs/build/html/struct_divide-members.html | 60 +- docs/build/html/struct_divide.html | 67 +- docs/build/html/struct_divide.js | 4 + docs/build/html/struct_equal-members.html | 60 +- docs/build/html/struct_equal.html | 67 +- docs/build/html/struct_equal.js | 4 + docs/build/html/struct_erf-members.html | 60 +- docs/build/html/struct_erf.html | 67 +- docs/build/html/struct_erf.js | 4 + docs/build/html/struct_erf_inv-members.html | 60 +- docs/build/html/struct_erf_inv.html | 67 +- docs/build/html/struct_erf_inv.js | 4 + docs/build/html/struct_exp-members.html | 60 +- docs/build/html/struct_exp.html | 69 +- docs/build/html/struct_exp.js | 5 + .../build/html/struct_exp_sub_op-members.html | 60 +- docs/build/html/struct_exp_sub_op.html | 67 +- docs/build/html/struct_exp_sub_op.js | 4 + docs/build/html/struct_expm1-members.html | 60 +- docs/build/html/struct_expm1.html | 67 +- docs/build/html/struct_expm1.js | 4 + docs/build/html/struct_floor-members.html | 60 +- docs/build/html/struct_floor.html | 85 +- docs/build/html/struct_floor.js | 13 + .../html/struct_floor_divide-members.html | 60 +- docs/build/html/struct_floor_divide.html | 73 +- docs/build/html/struct_floor_divide.js | 7 + .../html/struct_g_e_m_v_kernel-members.html | 60 +- docs/build/html/struct_g_e_m_v_kernel.html | 113 +- docs/build/html/struct_g_e_m_v_kernel.js | 16 + .../html/struct_g_e_m_v_t_kernel-members.html | 60 +- docs/build/html/struct_g_e_m_v_t_kernel.html | 113 +- docs/build/html/struct_g_e_m_v_t_kernel.js | 14 + docs/build/html/struct_greater-members.html | 60 +- docs/build/html/struct_greater.html | 67 +- docs/build/html/struct_greater.js | 4 + .../html/struct_greater_equal-members.html | 60 +- docs/build/html/struct_greater_equal.html | 67 +- docs/build/html/struct_greater_equal.js | 4 + docs/build/html/struct_imag-members.html | 60 +- docs/build/html/struct_imag.html | 67 +- docs/build/html/struct_imag.js | 4 + docs/build/html/struct_indices-members.html | 62 +- docs/build/html/struct_indices.html | 81 +- docs/build/html/struct_indices.js | 8 + .../struct_kernel_merge_sort-members.html | 60 +- docs/build/html/struct_kernel_merge_sort.html | 75 +- docs/build/html/struct_kernel_merge_sort.js | 8 + ...kernel_multi_block_merge_sort-members.html | 60 +- .../struct_kernel_multi_block_merge_sort.html | 81 +- .../struct_kernel_multi_block_merge_sort.js | 7 + .../build/html/struct_left_shift-members.html | 60 +- docs/build/html/struct_left_shift.html | 67 +- docs/build/html/struct_left_shift.js | 4 + docs/build/html/struct_less-members.html | 60 +- docs/build/html/struct_less.html | 67 +- docs/build/html/struct_less.js | 4 + .../build/html/struct_less_equal-members.html | 60 +- docs/build/html/struct_less_equal.html | 67 +- docs/build/html/struct_less_equal.js | 4 + docs/build/html/struct_less_than-members.html | 60 +- docs/build/html/struct_less_than.html | 69 +- docs/build/html/struct_less_than.js | 5 + docs/build/html/struct_limits-members.html | 60 +- docs/build/html/struct_limits.html | 77 +- docs/build/html/struct_limits.js | 9 + ...t_limits_3_01bfloat16__t_01_4-members.html | 104 - .../struct_limits_3_01bfloat16__t_01_4.html | 206 - .../struct_limits_3_01bool_01_4-members.html | 102 - .../html/struct_limits_3_01bool_01_4.html | 158 - ..._limits_3_01complex64__t_01_4-members.html | 102 - .../struct_limits_3_01complex64__t_01_4.html | 165 - .../struct_limits_3_01float_01_4-members.html | 104 - .../html/struct_limits_3_01float_01_4.html | 206 - .../struct_limits_3_01half_01_4-members.html | 104 - .../html/struct_limits_3_01half_01_4.html | 206 - ...ruct_limits_3_01int16__t_01_4-members.html | 104 - .../html/struct_limits_3_01int16__t_01_4.html | 206 - ...ruct_limits_3_01int32__t_01_4-members.html | 104 - .../html/struct_limits_3_01int32__t_01_4.html | 206 - ...ruct_limits_3_01int64__t_01_4-members.html | 104 - .../html/struct_limits_3_01int64__t_01_4.html | 206 - .../html/struct_limits_3_01int8__t_01_4.html | 206 - ...uct_limits_3_01uint16__t_01_4-members.html | 104 - .../struct_limits_3_01uint16__t_01_4.html | 206 - ...uct_limits_3_01uint32__t_01_4-members.html | 104 - .../struct_limits_3_01uint32__t_01_4.html | 206 - ...uct_limits_3_01uint64__t_01_4-members.html | 104 - .../struct_limits_3_01uint64__t_01_4.html | 206 - ...ruct_limits_3_01uint8__t_01_4-members.html | 104 - .../html/struct_limits_3_01uint8__t_01_4.html | 206 - docs/build/html/struct_log-members.html | 60 +- docs/build/html/struct_log.html | 67 +- docs/build/html/struct_log.js | 4 + docs/build/html/struct_log10-members.html | 60 +- docs/build/html/struct_log10.html | 67 +- docs/build/html/struct_log10.js | 4 + docs/build/html/struct_log1p-members.html | 60 +- docs/build/html/struct_log1p.html | 67 +- docs/build/html/struct_log1p.js | 4 + docs/build/html/struct_log2-members.html | 60 +- docs/build/html/struct_log2.html | 67 +- docs/build/html/struct_log2.js | 4 + .../html/struct_log_add_exp-members.html | 60 +- docs/build/html/struct_log_add_exp.html | 67 +- docs/build/html/struct_log_add_exp.js | 4 + .../html/struct_logical_and-members.html | 60 +- docs/build/html/struct_logical_and.html | 67 +- docs/build/html/struct_logical_and.js | 4 + .../html/struct_logical_not-members.html | 60 +- docs/build/html/struct_logical_not.html | 67 +- docs/build/html/struct_logical_not.js | 4 + .../build/html/struct_logical_or-members.html | 60 +- docs/build/html/struct_logical_or.html | 67 +- docs/build/html/struct_logical_or.js | 4 + .../struct_looped_elem_to_loc-members.html | 64 +- .../build/html/struct_looped_elem_to_loc.html | 105 +- docs/build/html/struct_looped_elem_to_loc.js | 16 + ...0_01_offset_t_00_01false_01_4-members.html | 105 - ..._3_011_00_01_offset_t_00_01false_01_4.html | 263 - ...00_01_offset_t_00_01true_01_4-members.html | 107 - ...c_3_011_00_01_offset_t_00_01true_01_4.html | 299 - .../struct_m_l_x_conv_params-members.html | 66 +- docs/build/html/struct_m_l_x_conv_params.html | 91 +- docs/build/html/struct_m_l_x_conv_params.js | 18 + docs/build/html/struct_max-members.html | 60 +- docs/build/html/struct_max.html | 67 +- docs/build/html/struct_max.js | 4 + docs/build/html/struct_max_op-members.html | 60 +- docs/build/html/struct_max_op.html | 67 +- docs/build/html/struct_max_op.js | 4 + docs/build/html/struct_maximum-members.html | 60 +- docs/build/html/struct_maximum.html | 75 +- docs/build/html/struct_maximum.js | 6 + docs/build/html/struct_min.html | 61 +- docs/build/html/struct_minimum-members.html | 60 +- docs/build/html/struct_minimum.html | 75 +- docs/build/html/struct_minimum.js | 6 + docs/build/html/struct_mul_op-members.html | 60 +- docs/build/html/struct_mul_op.html | 67 +- docs/build/html/struct_mul_op.js | 4 + docs/build/html/struct_multiply-members.html | 60 +- docs/build/html/struct_multiply.html | 67 +- docs/build/html/struct_multiply.js | 4 + .../build/html/struct_na_n_equal-members.html | 60 +- docs/build/html/struct_na_n_equal.html | 69 +- docs/build/html/struct_na_n_equal.js | 5 + docs/build/html/struct_negative-members.html | 60 +- docs/build/html/struct_negative.html | 67 +- docs/build/html/struct_negative.js | 4 + docs/build/html/struct_none-members.html | 60 +- docs/build/html/struct_none.html | 67 +- docs/build/html/struct_none.js | 4 + docs/build/html/struct_not_equal-members.html | 60 +- docs/build/html/struct_not_equal.html | 69 +- docs/build/html/struct_not_equal.js | 5 + docs/build/html/struct_or.html | 61 +- docs/build/html/struct_power-members.html | 60 +- docs/build/html/struct_power.html | 75 +- docs/build/html/struct_power.js | 6 + docs/build/html/struct_prod.html | 61 +- ...struct_quantized_block_loader-members.html | 60 +- .../html/struct_quantized_block_loader.html | 119 +- .../html/struct_quantized_block_loader.js | 23 + .../html/struct_read_writer-members.html | 60 +- docs/build/html/struct_read_writer.html | 137 +- docs/build/html/struct_read_writer.js | 45 + docs/build/html/struct_real-members.html | 60 +- docs/build/html/struct_real.html | 67 +- docs/build/html/struct_real.js | 4 + docs/build/html/struct_remainder-members.html | 60 +- docs/build/html/struct_remainder.html | 81 +- docs/build/html/struct_remainder.js | 7 + .../html/struct_right_shift-members.html | 60 +- docs/build/html/struct_right_shift.html | 67 +- docs/build/html/struct_right_shift.js | 4 + docs/build/html/struct_round-members.html | 60 +- docs/build/html/struct_round.html | 69 +- docs/build/html/struct_round.js | 5 + docs/build/html/struct_rsqrt-members.html | 60 +- docs/build/html/struct_rsqrt.html | 67 +- docs/build/html/struct_rsqrt.js | 4 + docs/build/html/struct_scale_op-members.html | 60 +- docs/build/html/struct_scale_op.html | 71 +- docs/build/html/struct_scale_op.js | 6 + docs/build/html/struct_select-members.html | 60 +- docs/build/html/struct_select.html | 67 +- docs/build/html/struct_select.js | 4 + docs/build/html/struct_sigmoid-members.html | 60 +- docs/build/html/struct_sigmoid.html | 67 +- docs/build/html/struct_sigmoid.js | 4 + docs/build/html/struct_sign-members.html | 60 +- docs/build/html/struct_sign.html | 71 +- docs/build/html/struct_sign.js | 6 + docs/build/html/struct_sin-members.html | 60 +- docs/build/html/struct_sin.html | 69 +- docs/build/html/struct_sin.js | 5 + docs/build/html/struct_sinh-members.html | 60 +- docs/build/html/struct_sinh.html | 69 +- docs/build/html/struct_sinh.js | 5 + docs/build/html/struct_sqrt-members.html | 60 +- docs/build/html/struct_sqrt.html | 67 +- docs/build/html/struct_sqrt.js | 4 + docs/build/html/struct_square-members.html | 60 +- docs/build/html/struct_square.html | 67 +- docs/build/html/struct_square.js | 4 + docs/build/html/struct_sub_op-members.html | 60 +- docs/build/html/struct_sub_op.html | 67 +- docs/build/html/struct_sub_op.js | 4 + docs/build/html/struct_subtract-members.html | 60 +- docs/build/html/struct_subtract.html | 67 +- docs/build/html/struct_subtract.js | 4 + docs/build/html/struct_sum.html | 61 +- docs/build/html/struct_sum_op-members.html | 60 +- docs/build/html/struct_sum_op.html | 67 +- docs/build/html/struct_sum_op.js | 4 + docs/build/html/struct_tan-members.html | 60 +- docs/build/html/struct_tan.html | 69 +- docs/build/html/struct_tan.js | 5 + docs/build/html/struct_tanh-members.html | 60 +- docs/build/html/struct_tanh.html | 69 +- docs/build/html/struct_tanh.js | 5 + .../html/struct_thread_sort-members.html | 60 +- docs/build/html/struct_thread_sort.html | 65 +- docs/build/html/struct_thread_sort.js | 4 + .../html/struct_transform_scale-members.html | 60 +- docs/build/html/struct_transform_scale.html | 71 +- docs/build/html/struct_transform_scale.js | 6 + .../html/structcomplex64__t-members.html | 60 +- docs/build/html/structcomplex64__t.html | 115 +- docs/build/html/structcomplex64__t.js | 16 + ...ts__impl_3_01bfloat16__t_01_4-members.html | 64 +- ...ic__limits__impl_3_01bfloat16__t_01_4.html | 99 +- ...eric__limits__impl_3_01bfloat16__t_01_4.js | 20 + docs/build/html/structmetal_1_1is__empty.html | 65 +- .../build/html/structmetal_1_1is__static.html | 65 +- .../structmetal_1_1make__void-members.html | 66 +- .../build/html/structmetal_1_1make__void.html | 75 +- docs/build/html/structmetal_1_1make__void.js | 4 + .../html/structmetal_1_1pointer__element.html | 65 +- .../html/structmetal_1_1pointer__element.js | 4 + ...t_3_01constant_01_t_01_5_01_4-members.html | 105 - ...__element_3_01constant_01_t_01_5_01_4.html | 132 - ...ent_3_01device_01_t_01_5_01_4-members.html | 105 - ...er__element_3_01device_01_t_01_5_01_4.html | 132 - ...ent_3_01thread_01_t_01_5_01_4-members.html | 105 - ...er__element_3_01thread_01_t_01_5_01_4.html | 132 - ...lement_3_01threadgroup_01_t_01_5_01_4.html | 132 - ...1core_1_1___m_l_x___b_float16-members.html | 64 +- ...ctmlx_1_1core_1_1___m_l_x___b_float16.html | 77 +- ...ructmlx_1_1core_1_1___m_l_x___b_float16.js | 10 + ...1_1core_1_1___m_l_x___float16-members.html | 64 +- ...ructmlx_1_1core_1_1___m_l_x___float16.html | 77 +- ...structmlx_1_1core_1_1___m_l_x___float16.js | 10 + ...x_1_1core_1_1_command_encoder-members.html | 139 + ...structmlx_1_1core_1_1_command_encoder.html | 659 +++ .../structmlx_1_1core_1_1_command_encoder.js | 23 + ...coder_1_1_concurrent_context-members.html} | 73 +- ...ommand_encoder_1_1_concurrent_context.html | 185 + ..._command_encoder_1_1_concurrent_context.js | 5 + ...1core_1_1_contiguous_iterator-members.html | 82 +- ...ctmlx_1_1core_1_1_contiguous_iterator.html | 171 +- ...ructmlx_1_1core_1_1_contiguous_iterator.js | 10 + ...1_1_default_contiguous_reduce-members.html | 64 +- ...1_1core_1_1_default_contiguous_reduce.html | 75 +- ...x_1_1core_1_1_default_contiguous_reduce.js | 6 + ...re_1_1_default_strided_reduce-members.html | 64 +- ...lx_1_1core_1_1_default_strided_reduce.html | 75 +- ...tmlx_1_1core_1_1_default_strided_reduce.js | 6 + .../structmlx_1_1core_1_1_device-members.html | 64 +- .../html/structmlx_1_1core_1_1_device.html | 73 +- .../html/structmlx_1_1core_1_1_device.js | 12 + .../structmlx_1_1core_1_1_dtype-members.html | 64 +- .../html/structmlx_1_1core_1_1_dtype.html | 79 +- .../build/html/structmlx_1_1core_1_1_dtype.js | 40 + ...1_1core_1_1_function_exporter-members.html | 131 + ...ructmlx_1_1core_1_1_function_exporter.html | 436 ++ ...structmlx_1_1core_1_1_function_exporter.js | 14 + ...1_1core_1_1_imported_function-members.html | 125 + ...ructmlx_1_1core_1_1_imported_function.html | 254 + ...structmlx_1_1core_1_1_imported_function.js | 8 + ...uctmlx_1_1core_1_1_node_namer-members.html | 65 +- .../structmlx_1_1core_1_1_node_namer.html | 88 +- .../html/structmlx_1_1core_1_1_node_namer.js | 6 + ...x_1_1core_1_1_print_formatter-members.html | 64 +- ...structmlx_1_1core_1_1_print_formatter.html | 91 +- .../structmlx_1_1core_1_1_print_formatter.js | 15 + ...lx_1_1core_1_1_reduction_plan-members.html | 70 +- .../structmlx_1_1core_1_1_reduction_plan.html | 101 +- .../structmlx_1_1core_1_1_reduction_plan.js | 8 + .../structmlx_1_1core_1_1_stream-members.html | 64 +- .../html/structmlx_1_1core_1_1_stream.html | 67 +- .../html/structmlx_1_1core_1_1_stream.js | 6 + ...lx_1_1core_1_1_stream_context-members.html | 64 +- .../structmlx_1_1core_1_1_stream_context.html | 69 +- .../structmlx_1_1core_1_1_stream_context.js | 5 + ...mlx_1_1core_1_1_type_to_dtype-members.html | 64 +- .../structmlx_1_1core_1_1_type_to_dtype.html | 67 +- .../structmlx_1_1core_1_1_type_to_dtype.js | 4 + ...e_1_1array_1_1_array_iterator-members.html | 64 +- ...x_1_1core_1_1array_1_1_array_iterator.html | 75 +- ...mlx_1_1core_1_1array_1_1_array_iterator.js | 13 + ...mlx_1_1core_1_1array_1_1_data-members.html | 64 +- .../structmlx_1_1core_1_1array_1_1_data.html | 73 +- .../structmlx_1_1core_1_1array_1_1_data.js | 9 + ...lx_1_1core_1_1array_1_1_flags-members.html | 64 +- .../structmlx_1_1core_1_1array_1_1_flags.html | 65 +- .../structmlx_1_1core_1_1array_1_1_flags.js | 6 + ...tmlx_1_1core_1_1complex128__t-members.html | 64 +- .../structmlx_1_1core_1_1complex128__t.html | 79 +- .../structmlx_1_1core_1_1complex128__t.js | 7 + ...ctmlx_1_1core_1_1complex64__t-members.html | 64 +- .../structmlx_1_1core_1_1complex64__t.html | 79 +- .../html/structmlx_1_1core_1_1complex64__t.js | 7 + ...mlx_1_1core_1_1detail_1_1_abs-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_abs.html | 81 +- .../structmlx_1_1core_1_1detail_1_1_abs.js | 9 + ...mlx_1_1core_1_1detail_1_1_add-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_add.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_add.js | 4 + ...1_1core_1_1detail_1_1_arc_cos-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_arc_cos.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_arc_cos.js | 4 + ..._1core_1_1detail_1_1_arc_cosh-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_arc_cosh.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_arc_cosh.js | 4 + ...1_1core_1_1detail_1_1_arc_sin-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_arc_sin.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_arc_sin.js | 4 + ..._1core_1_1detail_1_1_arc_sinh-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_arc_sinh.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_arc_sinh.js | 4 + ...1_1core_1_1detail_1_1_arc_tan-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_arc_tan.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_arc_tan.js | 4 + ..._1core_1_1detail_1_1_arc_tan2-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_arc_tan2.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_arc_tan2.js | 4 + ..._1core_1_1detail_1_1_arc_tanh-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_arc_tanh.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_arc_tanh.js | 4 + ...ore_1_1detail_1_1_bitwise_and-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_bitwise_and.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_bitwise_and.js | 4 + ...core_1_1detail_1_1_bitwise_or-members.html | 64 +- ...tmlx_1_1core_1_1detail_1_1_bitwise_or.html | 71 +- ...uctmlx_1_1core_1_1detail_1_1_bitwise_or.js | 4 + ...ore_1_1detail_1_1_bitwise_xor-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_bitwise_xor.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_bitwise_xor.js | 4 + ...lx_1_1core_1_1detail_1_1_ceil-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_ceil.html | 89 +- .../structmlx_1_1core_1_1detail_1_1_ceil.js | 13 + ...1core_1_1detail_1_1_conjugate-members.html | 64 +- ...ctmlx_1_1core_1_1detail_1_1_conjugate.html | 67 +- ...ructmlx_1_1core_1_1detail_1_1_conjugate.js | 4 + ...mlx_1_1core_1_1detail_1_1_cos-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_cos.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_cos.js | 4 + ...lx_1_1core_1_1detail_1_1_cosh-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_cosh.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_cosh.js | 4 + ..._1_1core_1_1detail_1_1_divide-members.html | 64 +- ...tructmlx_1_1core_1_1detail_1_1_divide.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_divide.js | 4 + ...x_1_1core_1_1detail_1_1_equal-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_equal.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_equal.js | 4 + ...mlx_1_1core_1_1detail_1_1_erf-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_erf.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_erf.js | 4 + ...1_1core_1_1detail_1_1_erf_inv-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_erf_inv.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_erf_inv.js | 4 + ...mlx_1_1core_1_1detail_1_1_exp-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_exp.html | 73 +- .../structmlx_1_1core_1_1detail_1_1_exp.js | 5 + ...x_1_1core_1_1detail_1_1_expm1-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_expm1.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_expm1.js | 4 + ...x_1_1core_1_1detail_1_1_floor-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_floor.html | 89 +- .../structmlx_1_1core_1_1detail_1_1_floor.js | 13 + ...1_1core_1_1detail_1_1_greater-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_greater.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_greater.js | 4 + ...e_1_1detail_1_1_greater_equal-members.html | 64 +- ...x_1_1core_1_1detail_1_1_greater_equal.html | 71 +- ...mlx_1_1core_1_1detail_1_1_greater_equal.js | 4 + ...lx_1_1core_1_1detail_1_1_imag-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_imag.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_imag.js | 4 + ...core_1_1detail_1_1_in_tracing-members.html | 71 +- ...tmlx_1_1core_1_1detail_1_1_in_tracing.html | 108 +- ...uctmlx_1_1core_1_1detail_1_1_in_tracing.js | 7 + ...core_1_1detail_1_1_left_shift-members.html | 64 +- ...tmlx_1_1core_1_1detail_1_1_left_shift.html | 71 +- ...uctmlx_1_1core_1_1detail_1_1_left_shift.js | 4 + ...lx_1_1core_1_1detail_1_1_less-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_less.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_less.js | 4 + ...core_1_1detail_1_1_less_equal-members.html | 64 +- ...tmlx_1_1core_1_1detail_1_1_less_equal.html | 71 +- ...uctmlx_1_1core_1_1detail_1_1_less_equal.js | 4 + ...mlx_1_1core_1_1detail_1_1_log-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_log.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_log.js | 4 + ...x_1_1core_1_1detail_1_1_log10-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_log10.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_log10.js | 4 + ...x_1_1core_1_1detail_1_1_log1p-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_log1p.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_log1p.js | 4 + ...lx_1_1core_1_1detail_1_1_log2-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_log2.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_log2.js | 4 + ...ore_1_1detail_1_1_log_add_exp-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_log_add_exp.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_log_add_exp.js | 4 + ...ore_1_1detail_1_1_logical_and-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_logical_and.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_logical_and.js | 4 + ...ore_1_1detail_1_1_logical_not-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_logical_not.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_logical_not.js | 4 + ...core_1_1detail_1_1_logical_or-members.html | 64 +- ...tmlx_1_1core_1_1detail_1_1_logical_or.html | 71 +- ...uctmlx_1_1core_1_1detail_1_1_logical_or.js | 4 + ...1_1core_1_1detail_1_1_maximum-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_maximum.html | 77 +- ...structmlx_1_1core_1_1detail_1_1_maximum.js | 5 + ...1_1core_1_1detail_1_1_minimum-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_minimum.html | 77 +- ...structmlx_1_1core_1_1detail_1_1_minimum.js | 5 + ..._1core_1_1detail_1_1_multiply-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_multiply.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_multiply.js | 4 + ...core_1_1detail_1_1_na_n_equal-members.html | 64 +- ...tmlx_1_1core_1_1detail_1_1_na_n_equal.html | 71 +- ...uctmlx_1_1core_1_1detail_1_1_na_n_equal.js | 4 + ..._1core_1_1detail_1_1_negative-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_negative.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_negative.js | 4 + ...1core_1_1detail_1_1_not_equal-members.html | 64 +- ...ctmlx_1_1core_1_1detail_1_1_not_equal.html | 71 +- ...ructmlx_1_1core_1_1detail_1_1_not_equal.js | 4 + ...x_1_1core_1_1detail_1_1_power-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_power.html | 77 +- .../structmlx_1_1core_1_1detail_1_1_power.js | 5 + ...lx_1_1core_1_1detail_1_1_real-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_real.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_real.js | 4 + ...1core_1_1detail_1_1_remainder-members.html | 64 +- ...ctmlx_1_1core_1_1detail_1_1_remainder.html | 85 +- ...ructmlx_1_1core_1_1detail_1_1_remainder.js | 7 + ...re_1_1detail_1_1_retain_graph-members.html | 64 +- ...lx_1_1core_1_1detail_1_1_retain_graph.html | 71 +- ...tmlx_1_1core_1_1detail_1_1_retain_graph.js | 6 + ...ore_1_1detail_1_1_right_shift-members.html | 64 +- ...mlx_1_1core_1_1detail_1_1_right_shift.html | 71 +- ...ctmlx_1_1core_1_1detail_1_1_right_shift.js | 4 + ...x_1_1core_1_1detail_1_1_round-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_round.html | 73 +- .../structmlx_1_1core_1_1detail_1_1_round.js | 5 + ...x_1_1core_1_1detail_1_1_rsqrt-members.html | 64 +- ...structmlx_1_1core_1_1detail_1_1_rsqrt.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_rsqrt.js | 4 + ..._1_1core_1_1detail_1_1_select-members.html | 64 +- ...tructmlx_1_1core_1_1detail_1_1_select.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_select.js | 4 + ...1_1core_1_1detail_1_1_sigmoid-members.html | 64 +- ...ructmlx_1_1core_1_1detail_1_1_sigmoid.html | 71 +- ...structmlx_1_1core_1_1detail_1_1_sigmoid.js | 4 + ...lx_1_1core_1_1detail_1_1_sign-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_sign.html | 81 +- .../structmlx_1_1core_1_1detail_1_1_sign.js | 9 + ...mlx_1_1core_1_1detail_1_1_sin-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_sin.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_sin.js | 4 + ...lx_1_1core_1_1detail_1_1_sinh-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_sinh.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_sinh.js | 4 + ...lx_1_1core_1_1detail_1_1_sqrt-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_sqrt.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_sqrt.js | 4 + ..._1_1core_1_1detail_1_1_square-members.html | 64 +- ...tructmlx_1_1core_1_1detail_1_1_square.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_square.js | 4 + ..._1core_1_1detail_1_1_subtract-members.html | 64 +- ...uctmlx_1_1core_1_1detail_1_1_subtract.html | 71 +- ...tructmlx_1_1core_1_1detail_1_1_subtract.js | 4 + ...mlx_1_1core_1_1detail_1_1_tan-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_tan.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_tan.js | 4 + ...lx_1_1core_1_1detail_1_1_tanh-members.html | 64 +- .../structmlx_1_1core_1_1detail_1_1_tanh.html | 71 +- .../structmlx_1_1core_1_1detail_1_1_tanh.js | 4 + ...core_1_1distributed_1_1_group-members.html | 74 +- ...tmlx_1_1core_1_1distributed_1_1_group.html | 123 +- ...uctmlx_1_1core_1_1distributed_1_1_group.js | 8 + ..._1_1_custom_kernel_shape_info-members.html | 64 +- ..._1_1fast_1_1_custom_kernel_shape_info.html | 65 +- ...re_1_1fast_1_1_custom_kernel_shape_info.js | 6 + ...> structmlx_1_1core_1_1finfo-members.html} | 76 +- .../html/structmlx_1_1core_1_1finfo.html | 216 + docs/build/html/structmlx_1_1core_1_1finfo.js | 7 + ..._1_1metal_1_1_command_encoder-members.html | 64 +- ..._1_1core_1_1metal_1_1_command_encoder.html | 105 +- ...lx_1_1core_1_1metal_1_1_command_encoder.js | 23 + ...ncoder_1_1_concurrent_context-members.html | 64 +- ...ommand_encoder_1_1_concurrent_context.html | 69 +- ..._command_encoder_1_1_concurrent_context.js | 5 + ...re_1_1metal_1_1_device_stream-members.html | 64 +- ...lx_1_1core_1_1metal_1_1_device_stream.html | 69 +- ...tmlx_1_1core_1_1metal_1_1_device_stream.js | 13 + ...lx_1_1core_1_1metal_1_1_fence-members.html | 64 +- .../structmlx_1_1core_1_1metal_1_1_fence.html | 69 +- .../structmlx_1_1core_1_1metal_1_1_fence.js | 6 + ...structmlx_1_1core_1_1numeric__limits.html} | 78 +- .../structmlx_1_1core_1_1numeric__limits.js | 5 + ...tructmlx_1_1core_1_1numeric__limits_dup.js | 5 + ..._1scheduler_1_1_stream_thread-members.html | 64 +- ..._1core_1_1scheduler_1_1_stream_thread.html | 79 +- ..._1_1core_1_1scheduler_1_1_stream_thread.js | 13 + ...mlx_1_1steel_1_1_accum_helper-members.html | 65 +- .../structmlx_1_1steel_1_1_accum_helper.html | 87 +- .../structmlx_1_1steel_1_1_accum_helper.js | 5 + ...tmlx_1_1steel_1_1_attn_params-members.html | 72 +- .../structmlx_1_1steel_1_1_attn_params.html | 113 +- .../structmlx_1_1steel_1_1_attn_params.js | 18 + ...tructmlx_1_1steel_1_1_base_m_m_a_frag.html | 65 +- .../structmlx_1_1steel_1_1_base_m_m_a_frag.js | 30 + ...rag_3_01_t_00_018_00_018_01_4-members.html | 129 - ..._m_m_a_frag_3_01_t_00_018_00_018_01_4.html | 1037 ---- ...mlx_1_1steel_1_1_block_loader-members.html | 64 +- .../structmlx_1_1steel_1_1_block_loader.html | 135 +- .../structmlx_1_1steel_1_1_block_loader.js | 23 + ..._block_loader_1_1_read_vector-members.html | 64 +- ...teel_1_1_block_loader_1_1_read_vector.html | 67 +- ...1steel_1_1_block_loader_1_1_read_vector.js | 4 + ...x_1_1steel_1_1_block_loader_t-members.html | 64 +- ...structmlx_1_1steel_1_1_block_loader_t.html | 109 +- .../structmlx_1_1steel_1_1_block_loader_t.js | 17 + ...tmlx_1_1steel_1_1_block_m_m_a-members.html | 99 +- .../structmlx_1_1steel_1_1_block_m_m_a.html | 239 +- .../structmlx_1_1steel_1_1_block_m_m_a.js | 41 + ...lx_1_1steel_1_1_block_swizzle-members.html | 64 +- .../structmlx_1_1steel_1_1_block_swizzle.html | 69 +- .../structmlx_1_1steel_1_1_block_swizzle.js | 5 + ...tructmlx_1_1steel_1_1_c_shape-members.html | 64 +- .../html/structmlx_1_1steel_1_1_c_shape.html | 65 +- .../html/structmlx_1_1steel_1_1_c_shape.js | 5 + ...x_1_1steel_1_1_channel_helper-members.html | 64 +- ...structmlx_1_1steel_1_1_channel_helper.html | 65 +- .../structmlx_1_1steel_1_1_channel_helper.js | 9 + ...1_1_channel_helper_3_011_01_4-members.html | 107 - ..._1steel_1_1_channel_helper_3_011_01_4.html | 162 - ..._1steel_1_1_channel_helper_3_012_01_4.html | 162 - ...1_1_channel_helper_3_013_01_4-members.html | 107 - ..._1steel_1_1_channel_helper_3_013_01_4.html | 162 - ...1_1_channel_helper_3_014_01_4-members.html | 107 - ..._1steel_1_1_channel_helper_3_014_01_4.html | 162 - ...1_1_conv2_d_general_base_info-members.html | 64 +- ..._1steel_1_1_conv2_d_general_base_info.html | 65 +- ..._1_1steel_1_1_conv2_d_general_base_info.js | 5 + ...1_conv2_d_general_jump_params-members.html | 64 +- ...steel_1_1_conv2_d_general_jump_params.html | 65 +- ..._1steel_1_1_conv2_d_general_jump_params.js | 11 + ..._d_input_block_loader_general-members.html | 64 +- ..._1_conv2_d_input_block_loader_general.html | 119 +- ..._1_1_conv2_d_input_block_loader_general.js | 27 + ...put_block_loader_large_filter-members.html | 64 +- ...nv2_d_input_block_loader_large_filter.html | 115 +- ...conv2_d_input_block_loader_large_filter.js | 25 + ...t_block_loader_small_channels-members.html | 64 +- ...2_d_input_block_loader_small_channels.html | 113 +- ...nv2_d_input_block_loader_small_channels.js | 24 + ...put_block_loader_small_filter-members.html | 64 +- ...nv2_d_input_block_loader_small_filter.html | 115 +- ...conv2_d_input_block_loader_small_filter.js | 25 + ...1_conv2_d_weight_block_loader-members.html | 64 +- ...steel_1_1_conv2_d_weight_block_loader.html | 111 +- ..._1steel_1_1_conv2_d_weight_block_loader.js | 23 + ...d_weight_block_loader_general-members.html | 64 +- ...1_conv2_d_weight_block_loader_general.html | 123 +- ...1_1_conv2_d_weight_block_loader_general.js | 26 + ...t_block_loader_small_channels-members.html | 64 +- ..._d_weight_block_loader_small_channels.html | 111 +- ...v2_d_weight_block_loader_small_channels.js | 23 + ...el_1_1_g_e_m_m_add_m_m_params-members.html | 66 +- ...x_1_1steel_1_1_g_e_m_m_add_m_m_params.html | 75 +- ...mlx_1_1steel_1_1_g_e_m_m_add_m_m_params.js | 8 + ...x_1_1steel_1_1_g_e_m_m_kernel-members.html | 87 +- ...structmlx_1_1steel_1_1_g_e_m_m_kernel.html | 235 +- .../structmlx_1_1steel_1_1_g_e_m_m_kernel.js | 19 + ...x_1_1steel_1_1_g_e_m_m_params-members.html | 70 +- ...structmlx_1_1steel_1_1_g_e_m_m_params.html | 95 +- .../structmlx_1_1steel_1_1_g_e_m_m_params.js | 17 + ...el_1_1_g_e_m_m_spilt_k_params-members.html | 64 +- ...x_1_1steel_1_1_g_e_m_m_spilt_k_params.html | 65 +- ...mlx_1_1steel_1_1_g_e_m_m_spilt_k_params.js | 15 + ..._implicit_gemm_conv2_d_params-members.html | 64 +- ...teel_1_1_implicit_gemm_conv2_d_params.html | 65 +- ...1steel_1_1_implicit_gemm_conv2_d_params.js | 13 + ...uctmlx_1_1steel_1_1_layout2_d-members.html | 64 +- .../structmlx_1_1steel_1_1_layout2_d.html | 69 +- .../html/structmlx_1_1steel_1_1_layout2_d.js | 5 + ...structmlx_1_1steel_1_1_loop_alignment.html | 65 +- ...ctmlx_1_1steel_1_1_m_m_a_tile-members.html | 88 +- .../structmlx_1_1steel_1_1_m_m_a_tile.html | 377 +- .../html/structmlx_1_1steel_1_1_m_m_a_tile.js | 51 + ...ructmlx_1_1steel_1_1_shape2_d-members.html | 64 +- .../html/structmlx_1_1steel_1_1_shape2_d.html | 73 +- .../html/structmlx_1_1steel_1_1_shape2_d.js | 6 + ...lx_1_1steel_1_1_transform_add-members.html | 64 +- .../structmlx_1_1steel_1_1_transform_add.html | 89 +- .../structmlx_1_1steel_1_1_transform_add.js | 9 + ..._1_1steel_1_1_transform_axpby-members.html | 64 +- ...tructmlx_1_1steel_1_1_transform_axpby.html | 93 +- .../structmlx_1_1steel_1_1_transform_axpby.js | 11 + ...x_1_1steel_1_1_transform_none-members.html | 64 +- ...structmlx_1_1steel_1_1_transform_none.html | 81 +- .../structmlx_1_1steel_1_1_transform_none.js | 7 + ..._1steel_1_1integral__constant-members.html | 64 +- ...uctmlx_1_1steel_1_1integral__constant.html | 87 +- ...tructmlx_1_1steel_1_1integral__constant.js | 7 + ...ructmlx_1_1steel_1_1integral__constant.png | Bin 1444 -> 0 bytes ...tmlx_1_1steel_1_1is__integral-members.html | 74 +- .../structmlx_1_1steel_1_1is__integral.html | 83 +- .../structmlx_1_1steel_1_1is__integral.png | Bin 1072 -> 796 bytes ...ral__constant_3_01_t_00_01v_01_4_01_4.html | 132 - ...gral__constant_3_01_t_00_01v_01_4_01_4.png | Bin 1189 -> 0 bytes .../build/html/structmlx__atomic-members.html | 60 +- docs/build/html/structmlx__atomic.html | 63 +- docs/build/html/structmlx__atomic.js | 5 + ..._atomic_3_01_t_01_4_01_4_01_4-members.html | 101 - ...__metal__atomic_3_01_t_01_4_01_4_01_4.html | 128 - ...etfft_1_1detail_1_1_exec_c2_c-members.html | 64 +- ...ructpocketfft_1_1detail_1_1_exec_c2_c.html | 73 +- ...structpocketfft_1_1detail_1_1_exec_c2_c.js | 5 + ...etfft_1_1detail_1_1_exec_dcst-members.html | 64 +- ...ructpocketfft_1_1detail_1_1_exec_dcst.html | 73 +- ...structpocketfft_1_1detail_1_1_exec_dcst.js | 7 + ...ft_1_1detail_1_1_exec_hartley-members.html | 64 +- ...tpocketfft_1_1detail_1_1_exec_hartley.html | 73 +- ...uctpocketfft_1_1detail_1_1_exec_hartley.js | 4 + ...etfft_1_1detail_1_1_exec_r2_r-members.html | 64 +- ...ructpocketfft_1_1detail_1_1_exec_r2_r.html | 73 +- ...structpocketfft_1_1detail_1_1_exec_r2_r.js | 6 + ...cketfft_1_1detail_1_1_v_l_e_n-members.html | 64 +- ...structpocketfft_1_1detail_1_1_v_l_e_n.html | 69 +- .../structpocketfft_1_1detail_1_1_v_l_e_n.js | 4 + ...ructpocketfft_1_1detail_1_1_v_t_y_p_e.html | 65 +- ...cketfft_1_1detail_1_1add__vec-members.html | 64 +- ...structpocketfft_1_1detail_1_1add__vec.html | 67 +- .../structpocketfft_1_1detail_1_1add__vec.js | 5 + ...ec_3_01cmplx_3_01_t_01_4_01_4-members.html | 105 - ..._1add__vec_3_01cmplx_3_01_t_01_4_01_4.html | 132 - ...tpocketfft_1_1detail_1_1cmplx-members.html | 64 +- .../structpocketfft_1_1detail_1_1cmplx.html | 161 +- .../structpocketfft_1_1detail_1_1cmplx.js | 19 + ...reading_1_1aligned__allocator-members.html | 64 +- ...il_1_1threading_1_1aligned__allocator.html | 87 +- ...tail_1_1threading_1_1aligned__allocator.js | 8 + ...ctpocketfft_1_1detail_1_1util-members.html | 64 +- .../structpocketfft_1_1detail_1_1util.html | 83 +- .../html/structpocketfft_1_1detail_1_1util.js | 12 + docs/build/html/ternary__ops_8h.html | 65 +- docs/build/html/ternary__ops_8h.js | 4 + docs/build/html/ternary__ops_8h_source.html | 65 +- docs/build/html/threadpool_8h.html | 65 +- docs/build/html/threadpool_8h.js | 4 + docs/build/html/threadpool_8h_source.html | 75 +- docs/build/html/threefry_8h.html | 65 +- docs/build/html/threefry_8h.js | 4 + docs/build/html/threefry_8h_source.html | 67 +- docs/build/html/topics.html | 58 +- docs/build/html/topics.js | 4 + docs/build/html/transforms_8h.html | 70 +- docs/build/html/transforms_8h.js | 27 + docs/build/html/transforms_8h_source.html | 350 +- docs/build/html/transforms__impl_8h.html | 73 +- docs/build/html/transforms__impl_8h.js | 10 + .../html/transforms__impl_8h_source.html | 155 +- docs/build/html/type__traits_8h.html | 75 +- docs/build/html/type__traits_8h.js | 13 + docs/build/html/type__traits_8h_source.html | 93 +- docs/build/html/types_2bf16_8h.html | 104 +- docs/build/html/types_2bf16_8h.js | 174 + docs/build/html/types_2bf16_8h_source.html | 79 +- docs/build/html/types_2complex_8h.html | 79 +- docs/build/html/types_2complex_8h.js | 34 + docs/build/html/types_2complex_8h_source.html | 87 +- docs/build/html/unary__ops_8h.html | 65 +- docs/build/html/unary__ops_8h.js | 37 + docs/build/html/unary__ops_8h_source.html | 67 +- .../html/unionbool4__or__uint-members.html | 60 +- docs/build/html/unionbool4__or__uint.html | 61 +- docs/build/html/unionbool4__or__uint.js | 5 + ...re_1_1detail_1_1_int_or_float-members.html | 64 +- ...lx_1_1core_1_1detail_1_1_int_or_float.html | 65 +- ...nmlx_1_1core_1_1detail_1_1_int_or_float.js | 5 + docs/build/html/usage/compile.html | 170 +- docs/build/html/usage/distributed.html | 72 +- docs/build/html/usage/export.html | 1243 ++++ .../build/html/usage/function_transforms.html | 61 +- docs/build/html/usage/indexing.html | 65 +- docs/build/html/usage/lazy_evaluation.html | 59 +- docs/build/html/usage/numpy.html | 71 +- docs/build/html/usage/quick_start.html | 59 +- docs/build/html/usage/saving_and_loading.html | 55 +- docs/build/html/usage/unified_memory.html | 55 +- docs/build/html/usage/using_streams.html | 59 +- docs/build/html/utils_8h.html | 106 +- docs/build/html/utils_8h.js | 30 + docs/build/html/utils_8h_source.html | 387 +- 2642 files changed, 137687 insertions(+), 70861 deletions(-) create mode 100644 docs/build/html/_sources/dev/mlx_in_cpp.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.export_function.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.export_to_dot.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.exporter.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.finfo.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.import_function.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.kron.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.slice.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.slice_update.rst create mode 100644 docs/build/html/_sources/python/_autosummary/mlx.core.unflatten.rst create mode 100644 docs/build/html/_sources/python/export.rst create mode 100644 docs/build/html/_sources/usage/export.rst create mode 100644 docs/build/html/allocator_8h.js create mode 100644 docs/build/html/annotated_dup.js create mode 100644 docs/build/html/array_8h.js create mode 100644 docs/build/html/atomic_8h.js create mode 100644 docs/build/html/attn_2loader_8h.js create mode 100644 docs/build/html/attn_2mma_8h.js create mode 100644 docs/build/html/attn_2params_8h.js create mode 100644 docs/build/html/attn_8h.js create mode 100644 docs/build/html/backend_2accelerate_2utils_8h.js create mode 100644 docs/build/html/backend_2common_2load_8h.js create mode 100644 docs/build/html/backend_2common_2ops_8h.js create mode 100644 docs/build/html/backend_2common_2utils_8h.js create mode 100644 docs/build/html/backend_2metal_2allocator_8h.js create mode 100644 docs/build/html/backend_2metal_2device_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2complex_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2fft_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.js create mode 100644 docs/build/html/backend_2metal_2kernels_2utils_8h.js create mode 100644 docs/build/html/backend_2metal_2utils_8h.js create mode 100644 docs/build/html/bf16__math_8h.js create mode 100644 docs/build/html/binary__ops_8h.js create mode 100644 docs/build/html/class_thread_pool.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_abs.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_add.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_add_m_m.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arange.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_cos.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_cosh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_sin.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_sinh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_tan.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_tan2.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arc_tanh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arg_partition.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arg_reduce.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_arg_sort.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_as_strided.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_as_type.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_bitwise_binary.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_broadcast.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_broadcast_axes-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_broadcast_axes.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_broadcast_axes.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_broadcast_axes.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_ceil.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_cholesky.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_compiled.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_concatenate.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_conjugate.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_contiguous.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_convolution.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_copy.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_cos.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_cosh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_custom_transforms.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_depends.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_div_mod.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_divide.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice-members.html rename docs/build/html/{classmlx_1_1core_1_1_uniform.html => classmlx_1_1core_1_1_dynamic_slice.html} (58%) create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_eigh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_equal.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_erf.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_erf_inv.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_event.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_exp.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_expand_dims-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_expand_dims.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_expand_dims.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_expand_dims.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_expm1.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_f_f_t.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_flatten-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_flatten.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_flatten.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_flatten.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_floor.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_full.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_gather.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_gather_m_m.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_greater.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_greater_equal.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_hadamard.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_imag.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_inverse.js rename docs/build/html/{struct_limits_3_01int8__t_01_4-members.html => classmlx_1_1core_1_1_jit_compiler-members.html} (55%) create mode 100644 docs/build/html/classmlx_1_1core_1_1_jit_compiler.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_jit_compiler.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_less.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_less_equal.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_load.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_log.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_log1p.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_log_add_exp.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_logical_and.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_logical_not.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_logical_or.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_matmul.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_maximum.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_minimum.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_multiply.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_negative.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_not_equal.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_number_of_elements.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_pad.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_partition.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_power.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_primitive.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_q_r_f.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_quantized_matmul.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_random_bits.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_real.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_reduce.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_remainder.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_reshape.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_round.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_s_v_d.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_scan.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_scatter.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_select.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sigmoid.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sign.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sin.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sinh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_slice.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_slice_update.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_softmax.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sort.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_split.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_sqrt.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_square.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_squeeze-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_squeeze.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_squeeze.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_squeeze.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_stop_gradient.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_subtract.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_tan.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_tanh.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_transpose.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_unary_primitive.js rename docs/build/html/{classmlx_1_1core_1_1_uniform-members.html => classmlx_1_1core_1_1_unflatten-members.html} (59%) create mode 100644 docs/build/html/classmlx_1_1core_1_1_unflatten.html create mode 100644 docs/build/html/classmlx_1_1core_1_1_unflatten.js create mode 100644 docs/build/html/classmlx_1_1core_1_1_unflatten.png delete mode 100644 docs/build/html/classmlx_1_1core_1_1_uniform.png create mode 100644 docs/build/html/classmlx_1_1core_1_1_view.js create mode 100644 docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.js create mode 100644 docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.js create mode 100644 docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.js create mode 100644 docs/build/html/classmlx_1_1core_1_1array.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.js create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl-members.html create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html create mode 100644 docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.js create mode 100644 docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.js create mode 100644 docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.js create mode 100644 docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.js create mode 100644 docs/build/html/classmlx_1_1core_1_1io_1_1_reader.js create mode 100644 docs/build/html/classmlx_1_1core_1_1io_1_1_writer.js rename docs/build/html/{struct_cum_prod_3_01bool_01_4-members.html => classmlx_1_1core_1_1metal_1_1_buffer-members.html} (50%) create mode 100644 docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.html create mode 100644 docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.js create mode 100644 docs/build/html/classmlx_1_1core_1_1metal_1_1_device.js create mode 100644 docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.js create mode 100644 docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.js create mode 100644 docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.js create mode 100644 docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1arr.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1arr__info.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1cfftp.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1cndarr.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1fftblue.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1multi__iter.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1ndarr.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1rev__iter.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1rfftp.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1simple__iter.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.js create mode 100644 docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.js create mode 100644 docs/build/html/common_2arange_8h.js create mode 100644 docs/build/html/common_2copy_8h.js create mode 100644 docs/build/html/common_2hadamard_8h.js create mode 100644 docs/build/html/common_2reduce_8h.js create mode 100644 docs/build/html/common_2slicing_8h.js create mode 100644 docs/build/html/compile_8h.js create mode 100644 docs/build/html/compile__impl_8h.js create mode 100644 docs/build/html/compiled_8h.js create mode 100644 docs/build/html/compiled__preamble_8h.js create mode 100644 docs/build/html/conv_2params_8h.js create mode 100644 docs/build/html/defines_8h.js create mode 100644 docs/build/html/dev/mlx_in_cpp.html create mode 100644 docs/build/html/device_8h.js create mode 100644 docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.js create mode 100644 docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.js create mode 100644 docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.js create mode 100644 docs/build/html/dir_23833761034051b43bb6c170b56e2cce.js create mode 100644 docs/build/html/dir_4336740ec0075891704443b417fef6cb.js create mode 100644 docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.js create mode 100644 docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.js create mode 100644 docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.js create mode 100644 docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.js create mode 100644 docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.js create mode 100644 docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.js create mode 100644 docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.js create mode 100644 docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.js create mode 100644 docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.js create mode 100644 docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.js create mode 100644 docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.js create mode 100644 docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.js create mode 100644 docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.js create mode 100644 docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.js create mode 100644 docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.js create mode 100644 docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.js create mode 100644 docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.js create mode 100644 docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.js create mode 100644 docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.js create mode 100644 docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.js rename docs/build/html/{struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html => dir_fef8157d08ab8bc47d26a7b4e218df82.html} (55%) create mode 100644 docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.js create mode 100644 docs/build/html/distributed_2ops_8h.js create mode 100644 docs/build/html/distributed_2primitives_8h.js create mode 100644 docs/build/html/distributed_8h.js create mode 100644 docs/build/html/distributed__impl_8h.js create mode 100644 docs/build/html/dtype_8h.js create mode 100644 docs/build/html/einsum_8h.js create mode 100644 docs/build/html/erf_8h.js create mode 100644 docs/build/html/event_8h.js create mode 100644 docs/build/html/expm1f_8h.js create mode 100644 docs/build/html/export_8h.html create mode 100644 docs/build/html/export_8h.js create mode 100644 docs/build/html/export_8h_source.html create mode 100644 docs/build/html/export__impl_8h.html create mode 100644 docs/build/html/export__impl_8h.js create mode 100644 docs/build/html/export__impl_8h_source.html create mode 100644 docs/build/html/fast_8h.js create mode 100644 docs/build/html/fast__primitives_8h.js create mode 100644 docs/build/html/fft_8h.js create mode 100644 docs/build/html/files_dup.js create mode 100644 docs/build/html/fp16_8h.js create mode 100644 docs/build/html/functions_dup.js create mode 100644 docs/build/html/functions_func.js create mode 100644 docs/build/html/functions_vars.js create mode 100644 docs/build/html/gather_8h.js create mode 100644 docs/build/html/gemm_2loader_8h.js create mode 100644 docs/build/html/gemm_2mma_8h.js create mode 100644 docs/build/html/gemm_2params_8h.js create mode 100644 docs/build/html/gemm_8h.js create mode 100644 docs/build/html/gguf_8h.js create mode 100644 docs/build/html/globals_dup.js create mode 100644 docs/build/html/globals_func.js create mode 100644 docs/build/html/graph__utils_8h.js create mode 100644 docs/build/html/group__ops.js create mode 100644 docs/build/html/half__types_8h.js create mode 100644 docs/build/html/hierarchy.js create mode 100644 docs/build/html/includes_8h.js create mode 100644 docs/build/html/integral__constant_8h.js create mode 100644 docs/build/html/io_2load_8h.js create mode 100644 docs/build/html/io_8h.js create mode 100644 docs/build/html/jit_2gemv__masked_8h.js create mode 100644 docs/build/html/jit_2indexing_8h.js create mode 100644 docs/build/html/jit_2softmax_8h.js create mode 100644 docs/build/html/jit_2steel__conv_8h.js create mode 100644 docs/build/html/jit__compiler_8h.html create mode 100644 docs/build/html/jit__compiler_8h.js create mode 100644 docs/build/html/jit__compiler_8h_source.html create mode 100644 docs/build/html/kernels_2gemv__masked_8h.js create mode 100644 docs/build/html/kernels_2indexing_8h.js create mode 100644 docs/build/html/kernels_2softmax_8h.js create mode 100644 docs/build/html/kernels_2steel_2conv_2kernels_2steel__conv_8h.js create mode 100644 docs/build/html/kernels_8h.js create mode 100644 docs/build/html/lapack_8h.js create mode 100644 docs/build/html/limits_8h.html create mode 100644 docs/build/html/limits_8h.js create mode 100644 docs/build/html/limits_8h_source.html create mode 100644 docs/build/html/linalg_8h.js create mode 100644 docs/build/html/loader__channel__l_8h.js create mode 100644 docs/build/html/loader__channel__n_8h.js create mode 100644 docs/build/html/loader__general_8h.js create mode 100644 docs/build/html/matmul_8h.js delete mode 100644 docs/build/html/menu.js delete mode 100644 docs/build/html/menudata.js create mode 100644 docs/build/html/metal_2binary_8h.js create mode 100644 docs/build/html/metal_2copy_8h.js create mode 100644 docs/build/html/metal_2jit_2arange_8h.js create mode 100644 docs/build/html/metal_2kernels_2arange_8h.js create mode 100644 docs/build/html/metal_2kernels_2binary_8h.js create mode 100644 docs/build/html/metal_2kernels_2binary__two_8h.js create mode 100644 docs/build/html/metal_2kernels_2copy_8h.js create mode 100644 docs/build/html/metal_2kernels_2hadamard_8h.js create mode 100644 docs/build/html/metal_2kernels_2ternary_8h.js create mode 100644 docs/build/html/metal_2kernels_2unary_8h.js create mode 100644 docs/build/html/metal_2reduce_8h.js create mode 100644 docs/build/html/metal_2slicing_8h.js create mode 100644 docs/build/html/metal_2ternary_8h.js create mode 100644 docs/build/html/metal_2unary_8h.js create mode 100644 docs/build/html/metal_8h.js create mode 100644 docs/build/html/metal__impl_8h.js create mode 100644 docs/build/html/mpi_8h.html create mode 100644 docs/build/html/mpi_8h.js create mode 100644 docs/build/html/mpi_8h_source.html create mode 100644 docs/build/html/namespacemembers_dup.js create mode 100644 docs/build/html/namespacemembers_func.js create mode 100644 docs/build/html/namespacemetal.js create mode 100644 docs/build/html/namespacemlx.js create mode 100644 docs/build/html/namespacemlx_1_1core.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1allocator.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1detail.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1distributed.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1distributed_1_1detail.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1distributed_1_1mpi.html create mode 100644 docs/build/html/namespacemlx_1_1core_1_1fast.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1io.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1metal.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1random.js create mode 100644 docs/build/html/namespacemlx_1_1core_1_1scheduler.js create mode 100644 docs/build/html/namespacemlx_1_1steel.js create mode 100644 docs/build/html/namespacepocketfft.js create mode 100644 docs/build/html/namespacepocketfft_1_1detail.js create mode 100644 docs/build/html/namespacepocketfft_1_1detail_1_1threading.js create mode 100644 docs/build/html/namespaces_dup.js create mode 100644 docs/build/html/navtree.js create mode 100644 docs/build/html/navtreedata.js create mode 100644 docs/build/html/navtreeindex0.js create mode 100644 docs/build/html/navtreeindex1.js create mode 100644 docs/build/html/navtreeindex10.js create mode 100644 docs/build/html/navtreeindex11.js create mode 100644 docs/build/html/navtreeindex12.js create mode 100644 docs/build/html/navtreeindex13.js create mode 100644 docs/build/html/navtreeindex14.js create mode 100644 docs/build/html/navtreeindex15.js create mode 100644 docs/build/html/navtreeindex16.js create mode 100644 docs/build/html/navtreeindex17.js create mode 100644 docs/build/html/navtreeindex18.js create mode 100644 docs/build/html/navtreeindex19.js create mode 100644 docs/build/html/navtreeindex2.js create mode 100644 docs/build/html/navtreeindex20.js create mode 100644 docs/build/html/navtreeindex21.js create mode 100644 docs/build/html/navtreeindex22.js create mode 100644 docs/build/html/navtreeindex23.js create mode 100644 docs/build/html/navtreeindex24.js create mode 100644 docs/build/html/navtreeindex25.js create mode 100644 docs/build/html/navtreeindex26.js create mode 100644 docs/build/html/navtreeindex27.js create mode 100644 docs/build/html/navtreeindex28.js create mode 100644 docs/build/html/navtreeindex29.js create mode 100644 docs/build/html/navtreeindex3.js create mode 100644 docs/build/html/navtreeindex30.js create mode 100644 docs/build/html/navtreeindex31.js create mode 100644 docs/build/html/navtreeindex32.js create mode 100644 docs/build/html/navtreeindex4.js create mode 100644 docs/build/html/navtreeindex5.js create mode 100644 docs/build/html/navtreeindex6.js create mode 100644 docs/build/html/navtreeindex7.js create mode 100644 docs/build/html/navtreeindex8.js create mode 100644 docs/build/html/navtreeindex9.js create mode 100644 docs/build/html/ops_8h.js create mode 100644 docs/build/html/pocketfft_8h.js create mode 100644 docs/build/html/primitives_8h.js create mode 100644 docs/build/html/python/_autosummary/mlx.core.export_function.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.export_to_dot.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.exporter.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.finfo.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.import_function.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.kron.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.slice.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.slice_update.html create mode 100644 docs/build/html/python/_autosummary/mlx.core.unflatten.html create mode 100644 docs/build/html/python/export.html create mode 100644 docs/build/html/quantized_8h.js create mode 100644 docs/build/html/radix_8h.js create mode 100644 docs/build/html/random_8h.js create mode 100644 docs/build/html/readwrite_8h.js create mode 100644 docs/build/html/reduce__all_8h.js create mode 100644 docs/build/html/reduce__col_8h.js create mode 100644 docs/build/html/reduce__init_8h.js create mode 100644 docs/build/html/reduce__row_8h.js create mode 100644 docs/build/html/resident_8h.js create mode 100644 docs/build/html/scan_8h.js create mode 100644 docs/build/html/scatter_8h.js create mode 100644 docs/build/html/scheduler_8h.js create mode 100644 docs/build/html/sdpa__vector_8h.js create mode 100644 docs/build/html/search/classes_17.js create mode 100644 docs/build/html/search/defines_d.js create mode 100644 docs/build/html/search/files_13.js create mode 100644 docs/build/html/search/related_2.js create mode 100644 docs/build/html/search/related_3.js create mode 100644 docs/build/html/sort_8h.js create mode 100644 docs/build/html/steel_2defines_8h.js create mode 100644 docs/build/html/steel__attention_8h.js create mode 100644 docs/build/html/steel__conv__general_8h.js create mode 100644 docs/build/html/steel__gemm_8h.js create mode 100644 docs/build/html/steel__gemm__fused_8h.js create mode 100644 docs/build/html/steel__gemm__masked_8h.js create mode 100644 docs/build/html/steel__gemm__splitk_8h.js create mode 100644 docs/build/html/stream_8h.js create mode 100644 docs/build/html/struct___m_l_x___b_float16.js create mode 100644 docs/build/html/struct___no_mask.js create mode 100644 docs/build/html/struct_abs.js create mode 100644 docs/build/html/struct_add.js create mode 100644 docs/build/html/struct_arc_cos.js create mode 100644 docs/build/html/struct_arc_cosh.js create mode 100644 docs/build/html/struct_arc_sin.js create mode 100644 docs/build/html/struct_arc_sinh.js create mode 100644 docs/build/html/struct_arc_tan.js create mode 100644 docs/build/html/struct_arc_tan2.js create mode 100644 docs/build/html/struct_arc_tanh.js create mode 100644 docs/build/html/struct_bitwise_and.js create mode 100644 docs/build/html/struct_bitwise_or.js create mode 100644 docs/build/html/struct_bitwise_xor.js create mode 100644 docs/build/html/struct_block_merge_sort.js create mode 100644 docs/build/html/struct_ceil.js create mode 100644 docs/build/html/struct_conditional_type.js delete mode 100644 docs/build/html/struct_conditional_type_3_01true_00_01_t_00_01_u_01_4-members.html create mode 100644 docs/build/html/struct_conjugate.js create mode 100644 docs/build/html/struct_cos.js create mode 100644 docs/build/html/struct_cosh.js create mode 100644 docs/build/html/struct_cum_max.js create mode 100644 docs/build/html/struct_cum_min.js create mode 100644 docs/build/html/struct_cum_prod.js delete mode 100644 docs/build/html/struct_cum_prod_3_01bool_01_4.html create mode 100644 docs/build/html/struct_div_mod.js create mode 100644 docs/build/html/struct_div_op.js create mode 100644 docs/build/html/struct_divide.js create mode 100644 docs/build/html/struct_equal.js create mode 100644 docs/build/html/struct_erf.js create mode 100644 docs/build/html/struct_erf_inv.js create mode 100644 docs/build/html/struct_exp.js create mode 100644 docs/build/html/struct_exp_sub_op.js create mode 100644 docs/build/html/struct_expm1.js create mode 100644 docs/build/html/struct_floor.js create mode 100644 docs/build/html/struct_floor_divide.js create mode 100644 docs/build/html/struct_g_e_m_v_kernel.js create mode 100644 docs/build/html/struct_g_e_m_v_t_kernel.js create mode 100644 docs/build/html/struct_greater.js create mode 100644 docs/build/html/struct_greater_equal.js create mode 100644 docs/build/html/struct_imag.js create mode 100644 docs/build/html/struct_indices.js create mode 100644 docs/build/html/struct_kernel_merge_sort.js create mode 100644 docs/build/html/struct_kernel_multi_block_merge_sort.js create mode 100644 docs/build/html/struct_left_shift.js create mode 100644 docs/build/html/struct_less.js create mode 100644 docs/build/html/struct_less_equal.js create mode 100644 docs/build/html/struct_less_than.js create mode 100644 docs/build/html/struct_limits.js delete mode 100644 docs/build/html/struct_limits_3_01bfloat16__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01bfloat16__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01bool_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01bool_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01complex64__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01complex64__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01float_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01float_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01half_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01half_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01int16__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01int16__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01int32__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01int32__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01int64__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01int64__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01int8__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01uint16__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01uint16__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01uint32__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01uint32__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01uint64__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01uint64__t_01_4.html delete mode 100644 docs/build/html/struct_limits_3_01uint8__t_01_4-members.html delete mode 100644 docs/build/html/struct_limits_3_01uint8__t_01_4.html create mode 100644 docs/build/html/struct_log.js create mode 100644 docs/build/html/struct_log10.js create mode 100644 docs/build/html/struct_log1p.js create mode 100644 docs/build/html/struct_log2.js create mode 100644 docs/build/html/struct_log_add_exp.js create mode 100644 docs/build/html/struct_logical_and.js create mode 100644 docs/build/html/struct_logical_not.js create mode 100644 docs/build/html/struct_logical_or.js create mode 100644 docs/build/html/struct_looped_elem_to_loc.js delete mode 100644 docs/build/html/struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01false_01_4-members.html delete mode 100644 docs/build/html/struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01false_01_4.html delete mode 100644 docs/build/html/struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01true_01_4-members.html delete mode 100644 docs/build/html/struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01true_01_4.html create mode 100644 docs/build/html/struct_m_l_x_conv_params.js create mode 100644 docs/build/html/struct_max.js create mode 100644 docs/build/html/struct_max_op.js create mode 100644 docs/build/html/struct_maximum.js create mode 100644 docs/build/html/struct_minimum.js create mode 100644 docs/build/html/struct_mul_op.js create mode 100644 docs/build/html/struct_multiply.js create mode 100644 docs/build/html/struct_na_n_equal.js create mode 100644 docs/build/html/struct_negative.js create mode 100644 docs/build/html/struct_none.js create mode 100644 docs/build/html/struct_not_equal.js create mode 100644 docs/build/html/struct_power.js create mode 100644 docs/build/html/struct_quantized_block_loader.js create mode 100644 docs/build/html/struct_read_writer.js create mode 100644 docs/build/html/struct_real.js create mode 100644 docs/build/html/struct_remainder.js create mode 100644 docs/build/html/struct_right_shift.js create mode 100644 docs/build/html/struct_round.js create mode 100644 docs/build/html/struct_rsqrt.js create mode 100644 docs/build/html/struct_scale_op.js create mode 100644 docs/build/html/struct_select.js create mode 100644 docs/build/html/struct_sigmoid.js create mode 100644 docs/build/html/struct_sign.js create mode 100644 docs/build/html/struct_sin.js create mode 100644 docs/build/html/struct_sinh.js create mode 100644 docs/build/html/struct_sqrt.js create mode 100644 docs/build/html/struct_square.js create mode 100644 docs/build/html/struct_sub_op.js create mode 100644 docs/build/html/struct_subtract.js create mode 100644 docs/build/html/struct_sum_op.js create mode 100644 docs/build/html/struct_tan.js create mode 100644 docs/build/html/struct_tanh.js create mode 100644 docs/build/html/struct_thread_sort.js create mode 100644 docs/build/html/struct_transform_scale.js create mode 100644 docs/build/html/structcomplex64__t.js create mode 100644 docs/build/html/structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.js create mode 100644 docs/build/html/structmetal_1_1make__void.js create mode 100644 docs/build/html/structmetal_1_1pointer__element.js delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01constant_01_t_01_5_01_4-members.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01constant_01_t_01_5_01_4.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01device_01_t_01_5_01_4-members.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01device_01_t_01_5_01_4.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01thread_01_t_01_5_01_4-members.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01thread_01_t_01_5_01_4.html delete mode 100644 docs/build/html/structmetal_1_1pointer__element_3_01threadgroup_01_t_01_5_01_4.html create mode 100644 docs/build/html/structmlx_1_1core_1_1___m_l_x___b_float16.js create mode 100644 docs/build/html/structmlx_1_1core_1_1___m_l_x___float16.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_command_encoder-members.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_command_encoder.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_command_encoder.js rename docs/build/html/{structmlx_1_1steel_1_1_channel_helper_3_012_01_4-members.html => structmlx_1_1core_1_1_command_encoder_1_1_concurrent_context-members.html} (55%) create mode 100644 docs/build/html/structmlx_1_1core_1_1_command_encoder_1_1_concurrent_context.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_command_encoder_1_1_concurrent_context.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_contiguous_iterator.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_default_contiguous_reduce.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_default_strided_reduce.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_device.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_dtype.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_function_exporter-members.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_function_exporter.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_function_exporter.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_imported_function-members.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_imported_function.html create mode 100644 docs/build/html/structmlx_1_1core_1_1_imported_function.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_node_namer.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_print_formatter.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_reduction_plan.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_stream.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_stream_context.js create mode 100644 docs/build/html/structmlx_1_1core_1_1_type_to_dtype.js create mode 100644 docs/build/html/structmlx_1_1core_1_1array_1_1_array_iterator.js create mode 100644 docs/build/html/structmlx_1_1core_1_1array_1_1_data.js create mode 100644 docs/build/html/structmlx_1_1core_1_1array_1_1_flags.js create mode 100644 docs/build/html/structmlx_1_1core_1_1complex128__t.js create mode 100644 docs/build/html/structmlx_1_1core_1_1complex64__t.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_abs.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_add.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_cos.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_cosh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_sin.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_sinh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_tan.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_tan2.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_arc_tanh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_bitwise_and.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_bitwise_or.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_bitwise_xor.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_ceil.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_conjugate.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_cos.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_cosh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_divide.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_equal.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_erf.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_erf_inv.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_exp.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_expm1.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_floor.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_greater.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_greater_equal.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_imag.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_in_tracing.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_left_shift.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_less.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_less_equal.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_log.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_log10.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_log1p.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_log2.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_log_add_exp.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_logical_and.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_logical_not.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_logical_or.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_maximum.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_minimum.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_multiply.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_na_n_equal.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_negative.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_not_equal.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_power.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_real.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_remainder.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_retain_graph.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_right_shift.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_round.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_rsqrt.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_select.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_sigmoid.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_sign.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_sin.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_sinh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_sqrt.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_square.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_subtract.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_tan.js create mode 100644 docs/build/html/structmlx_1_1core_1_1detail_1_1_tanh.js create mode 100644 docs/build/html/structmlx_1_1core_1_1distributed_1_1_group.js create mode 100644 docs/build/html/structmlx_1_1core_1_1fast_1_1_custom_kernel_shape_info.js rename docs/build/html/{structmlx_1_1steel_1_1is__integral_3_01integral__constant_3_01_t_00_01v_01_4_01_4-members.html => structmlx_1_1core_1_1finfo-members.html} (56%) create mode 100644 docs/build/html/structmlx_1_1core_1_1finfo.html create mode 100644 docs/build/html/structmlx_1_1core_1_1finfo.js create mode 100644 docs/build/html/structmlx_1_1core_1_1metal_1_1_command_encoder.js create mode 100644 docs/build/html/structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.js create mode 100644 docs/build/html/structmlx_1_1core_1_1metal_1_1_device_stream.js create mode 100644 docs/build/html/structmlx_1_1core_1_1metal_1_1_fence.js rename docs/build/html/{structmetal_1_1pointer__element_3_01threadgroup_01_t_01_5_01_4-members.html => structmlx_1_1core_1_1numeric__limits.html} (57%) create mode 100644 docs/build/html/structmlx_1_1core_1_1numeric__limits.js create mode 100644 docs/build/html/structmlx_1_1core_1_1numeric__limits_dup.js create mode 100644 docs/build/html/structmlx_1_1core_1_1scheduler_1_1_stream_thread.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_accum_helper.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_attn_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_base_m_m_a_frag.js delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4-members.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html create mode 100644 docs/build/html/structmlx_1_1steel_1_1_block_loader.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_block_loader_1_1_read_vector.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_block_loader_t.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_block_m_m_a.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_block_swizzle.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_c_shape.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper.js delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_011_01_4-members.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_011_01_4.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_012_01_4.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_013_01_4-members.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_013_01_4.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_014_01_4-members.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1_channel_helper_3_014_01_4.html create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_general_base_info.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_general_jump_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_input_block_loader_general.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_input_block_loader_large_filter.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_channels.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_filter.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_weight_block_loader.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_weight_block_loader_general.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_conv2_d_weight_block_loader_small_channels.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_g_e_m_m_add_m_m_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_g_e_m_m_kernel.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_g_e_m_m_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_g_e_m_m_spilt_k_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_layout2_d.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_m_m_a_tile.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_shape2_d.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_transform_add.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_transform_axpby.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1_transform_none.js create mode 100644 docs/build/html/structmlx_1_1steel_1_1integral__constant.js delete mode 100644 docs/build/html/structmlx_1_1steel_1_1integral__constant.png delete mode 100644 docs/build/html/structmlx_1_1steel_1_1is__integral_3_01integral__constant_3_01_t_00_01v_01_4_01_4.html delete mode 100644 docs/build/html/structmlx_1_1steel_1_1is__integral_3_01integral__constant_3_01_t_00_01v_01_4_01_4.png create mode 100644 docs/build/html/structmlx__atomic.js delete mode 100644 docs/build/html/structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4-members.html delete mode 100644 docs/build/html/structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1_exec_c2_c.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1_exec_dcst.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1_exec_hartley.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1_exec_r2_r.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1_v_l_e_n.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1add__vec.js delete mode 100644 docs/build/html/structpocketfft_1_1detail_1_1add__vec_3_01cmplx_3_01_t_01_4_01_4-members.html delete mode 100644 docs/build/html/structpocketfft_1_1detail_1_1add__vec_3_01cmplx_3_01_t_01_4_01_4.html create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1cmplx.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1threading_1_1aligned__allocator.js create mode 100644 docs/build/html/structpocketfft_1_1detail_1_1util.js create mode 100644 docs/build/html/ternary__ops_8h.js create mode 100644 docs/build/html/threadpool_8h.js create mode 100644 docs/build/html/threefry_8h.js create mode 100644 docs/build/html/topics.js create mode 100644 docs/build/html/transforms_8h.js create mode 100644 docs/build/html/transforms__impl_8h.js create mode 100644 docs/build/html/type__traits_8h.js create mode 100644 docs/build/html/types_2bf16_8h.js create mode 100644 docs/build/html/types_2complex_8h.js create mode 100644 docs/build/html/unary__ops_8h.js create mode 100644 docs/build/html/unionbool4__or__uint.js create mode 100644 docs/build/html/unionmlx_1_1core_1_1detail_1_1_int_or_float.js create mode 100644 docs/build/html/usage/export.html create mode 100644 docs/build/html/utils_8h.js diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 2325e4b1c..11664a76f 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d832ae99342413e9277cab63924f1dd4 +config: b9afea4432e35a4ac5dbffb76ed39348 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/dev/extensions.rst b/docs/build/html/_sources/dev/extensions.rst index 196f8bf65..c08614d03 100644 --- a/docs/build/html/_sources/dev/extensions.rst +++ b/docs/build/html/_sources/dev/extensions.rst @@ -420,8 +420,8 @@ element in the output. constant const float& alpha [[buffer(3)]], constant const float& beta [[buffer(4)]], constant const int* shape [[buffer(5)]], - constant const size_t* x_strides [[buffer(6)]], - constant const size_t* y_strides [[buffer(7)]], + constant const int64_t* x_strides [[buffer(6)]], + constant const int64_t* y_strides [[buffer(7)]], constant const int& ndim [[buffer(8)]], uint index [[thread_position_in_grid]]) { // Convert linear indices to offsets in array @@ -438,24 +438,10 @@ each instantiation a unique host name so we can identify it. .. code-block:: C++ - #define instantiate_axpby(type_name, type) \ - template [[host_name("axpby_general_" #type_name)]] \ - [[kernel]] void axpby_general( \ - device const type* x [[buffer(0)]], \ - device const type* y [[buffer(1)]], \ - device type* out [[buffer(2)]], \ - constant const float& alpha [[buffer(3)]], \ - constant const float& beta [[buffer(4)]], \ - constant const int* shape [[buffer(5)]], \ - constant const size_t* x_strides [[buffer(6)]], \ - constant const size_t* y_strides [[buffer(7)]], \ - constant const int& ndim [[buffer(8)]], \ - uint index [[thread_position_in_grid]]); - - instantiate_axpby(float32, float); - instantiate_axpby(float16, half); - instantiate_axpby(bfloat16, bfloat16_t); - instantiate_axpby(complex64, complex64_t); + instantiate_kernel("axpby_general_float32", axpby_general, float) + instantiate_kernel("axpby_general_float16", axpby_general, float16_t) + instantiate_kernel("axpby_general_bfloat16", axpby_general, bfloat16_t) + instantiate_kernel("axpby_general_complex64", axpby_general, complex64_t) The logic to determine the kernel, set the inputs, resolve the grid dimensions, and dispatch to the GPU are contained in :meth:`Axpby::eval_gpu` as shown diff --git a/docs/build/html/_sources/dev/mlx_in_cpp.rst b/docs/build/html/_sources/dev/mlx_in_cpp.rst new file mode 100644 index 000000000..af778b33b --- /dev/null +++ b/docs/build/html/_sources/dev/mlx_in_cpp.rst @@ -0,0 +1,121 @@ +.. _mlx_in_cpp: + +Using MLX in C++ +================ + +You can use MLX in a C++ project with CMake. + +.. note:: + + This guide is based one the following `example using MLX in C++ + `_ + +First install MLX: + +.. code-block:: bash + + pip install -U mlx + +You can also install the MLX Python package from source or just the C++ +library. For more information see the :ref:`documentation on installing MLX +`. + +Next make an example program in ``example.cpp``: + +.. code-block:: C++ + + #include + + #include "mlx/mlx.h" + + namespace mx = mlx::core; + + int main() { + auto x = mx::array({1, 2, 3}); + auto y = mx::array({1, 2, 3}); + std::cout << x + y << std::endl; + return 0; + } + +The next step is to setup a CMake file in ``CMakeLists.txt``: + +.. code-block:: cmake + + cmake_minimum_required(VERSION 3.27) + + project(example LANGUAGES CXX) + + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + + +Depending on how you installed MLX, you may need to tell CMake where to +find it. + +If you installed MLX with Python, then add the following to the CMake file: + +.. code-block:: cmake + + find_package( + Python 3.9 + COMPONENTS Interpreter Development.Module + REQUIRED) + execute_process( + COMMAND "${Python_EXECUTABLE}" -m mlx --cmake-dir + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE MLX_ROOT) + +If you installed the MLX C++ package to a system path, then CMake should be +able to find it. If you installed it to a non-standard location or CMake can't +find MLX then set ``MLX_ROOT`` to the location where MLX is installed: + +.. code-block:: cmake + + set(MLX_ROOT "/path/to/mlx/") + +Next, instruct CMake to find MLX: + +.. code-block:: cmake + + find_package(MLX CONFIG REQUIRED) + +Finally, add the ``example.cpp`` program as an executable and link MLX. + +.. code-block:: cmake + + add_executable(example example.cpp) + target_link_libraries(example PRIVATE mlx) + +You can build the example with: + +.. code-block:: bash + + cmake -B build -DCMAKE_BUILD_TYPE=Release + cmake --build build + +And run it with: + +.. code-block:: bash + + ./build/example + +Note ``find_package(MLX CONFIG REQUIRED)`` sets the following variables: + +.. list-table:: Package Variables + :widths: 20 20 + :header-rows: 1 + + * - Variable + - Description + * - MLX_FOUND + - ``True`` if MLX is found + * - MLX_INCLUDE_DIRS + - Include directory + * - MLX_LIBRARIES + - Libraries to link against + * - MLX_CXX_FLAGS + - Additional compiler flags + * - MLX_BUILD_ACCELERATE + - ``True`` if MLX was built with Accelerate + * - MLX_BUILD_METAL + - ``True`` if MLX was built with Metal diff --git a/docs/build/html/_sources/index.rst b/docs/build/html/_sources/index.rst index 1e5e6ad8a..075861e88 100644 --- a/docs/build/html/_sources/index.rst +++ b/docs/build/html/_sources/index.rst @@ -45,6 +45,7 @@ are the CPU and GPU. usage/numpy usage/distributed usage/using_streams + usage/export .. toctree:: :caption: Examples @@ -61,6 +62,7 @@ are the CPU and GPU. python/array python/data_types python/devices_and_streams + python/export python/ops python/random python/transforms @@ -86,3 +88,4 @@ are the CPU and GPU. dev/extensions dev/metal_debugger dev/custom_metal_kernels + dev/mlx_in_cpp diff --git a/docs/build/html/_sources/install.rst b/docs/build/html/_sources/install.rst index 1566d1f2c..059b2cba4 100644 --- a/docs/build/html/_sources/install.rst +++ b/docs/build/html/_sources/install.rst @@ -1,3 +1,5 @@ +.. _build_and_install: + Build and Install ================= @@ -53,7 +55,7 @@ Build Requirements ^^^^^^^^^^^^^^^^^^ - A C++ compiler with C++17 support (e.g. Clang >= 5.0) -- `cmake `_ -- version 3.24 or later, and ``make`` +- `cmake `_ -- version 3.25 or later, and ``make`` - Xcode >= 15.0 and macOS SDK >= 14.0 .. note:: diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.export_function.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.export_function.rst new file mode 100644 index 000000000..e7989b936 --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.export_function.rst @@ -0,0 +1,6 @@ +mlx.core.export\_function +========================= + +.. currentmodule:: mlx.core + +.. autofunction:: export_function \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.export_to_dot.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.export_to_dot.rst new file mode 100644 index 000000000..3879cd58a --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.export_to_dot.rst @@ -0,0 +1,6 @@ +mlx.core.export\_to\_dot +======================== + +.. currentmodule:: mlx.core + +.. autofunction:: export_to_dot \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.exporter.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.exporter.rst new file mode 100644 index 000000000..ba840f245 --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.exporter.rst @@ -0,0 +1,6 @@ +mlx.core.exporter +================= + +.. currentmodule:: mlx.core + +.. autofunction:: exporter \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.finfo.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.finfo.rst new file mode 100644 index 000000000..4d3f1846e --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.finfo.rst @@ -0,0 +1,30 @@ +mlx.core.finfo +============== + +.. currentmodule:: mlx.core + +.. autoclass:: finfo + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~finfo.__init__ + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~finfo.dtype + ~finfo.max + ~finfo.min + + \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.import_function.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.import_function.rst new file mode 100644 index 000000000..97c48f70d --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.import_function.rst @@ -0,0 +1,6 @@ +mlx.core.import\_function +========================= + +.. currentmodule:: mlx.core + +.. autofunction:: import_function \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.kron.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.kron.rst new file mode 100644 index 000000000..f6f4d60d7 --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.kron.rst @@ -0,0 +1,6 @@ +mlx.core.kron +============= + +.. currentmodule:: mlx.core + +.. autofunction:: kron \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.slice.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.slice.rst new file mode 100644 index 000000000..a18d1f0ad --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.slice.rst @@ -0,0 +1,6 @@ +mlx.core.slice +============== + +.. currentmodule:: mlx.core + +.. autofunction:: slice \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.slice_update.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.slice_update.rst new file mode 100644 index 000000000..ba2d26c42 --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.slice_update.rst @@ -0,0 +1,6 @@ +mlx.core.slice\_update +====================== + +.. currentmodule:: mlx.core + +.. autofunction:: slice_update \ No newline at end of file diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.unflatten.rst b/docs/build/html/_sources/python/_autosummary/mlx.core.unflatten.rst new file mode 100644 index 000000000..1a677075a --- /dev/null +++ b/docs/build/html/_sources/python/_autosummary/mlx.core.unflatten.rst @@ -0,0 +1,6 @@ +mlx.core.unflatten +================== + +.. currentmodule:: mlx.core + +.. autofunction:: unflatten \ No newline at end of file diff --git a/docs/build/html/_sources/python/data_types.rst b/docs/build/html/_sources/python/data_types.rst index 549446447..c75bfcb9d 100644 --- a/docs/build/html/_sources/python/data_types.rst +++ b/docs/build/html/_sources/python/data_types.rst @@ -66,3 +66,4 @@ documentation for more information. Use :func:`issubdtype` to determine if one Dtype DtypeCategory issubdtype + finfo diff --git a/docs/build/html/_sources/python/export.rst b/docs/build/html/_sources/python/export.rst new file mode 100644 index 000000000..9a1599096 --- /dev/null +++ b/docs/build/html/_sources/python/export.rst @@ -0,0 +1,14 @@ +.. _export: + +Export Functions +================ + +.. currentmodule:: mlx.core + +.. autosummary:: + :toctree: _autosummary + + export_function + import_function + exporter + export_to_dot diff --git a/docs/build/html/_sources/python/ops.rst b/docs/build/html/_sources/python/ops.rst index 572b02a98..248028575 100644 --- a/docs/build/html/_sources/python/ops.rst +++ b/docs/build/html/_sources/python/ops.rst @@ -89,6 +89,7 @@ Operations isneginf isposinf issubdtype + kron left_shift less less_equal @@ -144,6 +145,8 @@ Operations sign sin sinh + slice + slice_update softmax sort split @@ -168,6 +171,7 @@ Operations tri tril triu + unflatten var view where diff --git a/docs/build/html/_sources/usage/compile.rst b/docs/build/html/_sources/usage/compile.rst index 091505fe4..7fe0ffd4f 100644 --- a/docs/build/html/_sources/usage/compile.rst +++ b/docs/build/html/_sources/usage/compile.rst @@ -421,3 +421,77 @@ the most opportunity to optimize the computation graph: # Compiling the outer function is good to do as it will likely # be faster even though the inner functions are compiled fun = mx.compile(outer) + + + +.. _shapeless_compile: + +Shapeless Compilation +--------------------- + +When the shape of an input to a compiled function changes, the function is +recompiled. You can compile a function once and run it on inputs with +variable shapes by specifying ``shapeless=True`` to :func:`compile`. In this +case changes to the shapes of the inputs do not cause the function to be +recompiled. + +.. code-block:: python + + def fun(x, y): + return mx.abs(x + y) + + compiled_fun = mx.compile(fun, shapeless=True) + + x = mx.array(1.0) + y = mx.array(-2.0) + + # Firt call compiles the function + print(compiled_fun(x, y)) + + # Second call with different shapes + # does not recompile the function + x = mx.array([1.0, -6.0]) + y = mx.array([-2.0, 3.0]) + print(compiled_fun(x, y)) + + +Use shapeless compilations carefully. Since compilation is not triggered when +shapes change, any graphs which are conditional on the input shapes will not +work as expected. Shape-dependent computations are common and sometimes subtle +to detect. For example: + +.. code-block:: python + + def fun(x): + return x.reshape(x.shape[0] * x.shape[1], -1) + + compiled_fun = mx.compile(fun, shapeless=True) + + x = mx.random.uniform(shape=(2, 3, 4)) + + out = compiled_fun(x) + + x = mx.random.uniform(shape=(5, 5, 3)) + + # Error, can't reshape (5, 5, 3) to (6, -1) + out = compiled_fun(x) + +The second call to the ``compiled_fun`` fails because of the call to +:func:`reshape` which uses the static shape of ``x`` in the first call. We can +fix this by using :func:`flatten` to avoid hardcoding the shape of ``x``: + +.. code-block:: python + + def fun(x): + return x.flatten(0, 1) + + compiled_fun = mx.compile(fun, shapeless=True) + + x = mx.random.uniform(shape=(2, 3, 4)) + + out = compiled_fun(x) + + x = mx.random.uniform(shape=(5, 5, 3)) + + # Ok + out = compiled_fun(x) diff --git a/docs/build/html/_sources/usage/distributed.rst b/docs/build/html/_sources/usage/distributed.rst index 702951a0c..ec3accab3 100644 --- a/docs/build/html/_sources/usage/distributed.rst +++ b/docs/build/html/_sources/usage/distributed.rst @@ -141,12 +141,13 @@ everything else remaining the same. from mlx.utils import tree_map def all_reduce_grads(grads): - N = mx.distributed.init() + N = mx.distributed.init().size() if N == 1: return grads return tree_map( - lambda x: mx.distributed.all_sum(x) / N, - grads) + lambda x: mx.distributed.all_sum(x) / N, + grads + ) def step(model, x, y): loss, grads = loss_grad_fn(model, x, y) diff --git a/docs/build/html/_sources/usage/export.rst b/docs/build/html/_sources/usage/export.rst new file mode 100644 index 000000000..812073609 --- /dev/null +++ b/docs/build/html/_sources/usage/export.rst @@ -0,0 +1,288 @@ +.. _export_usage: + +Exporting Functions +=================== + +.. currentmodule:: mlx.core + +MLX has an API to export and import functions to and from a file. This lets you +run computations written in one MLX front-end (e.g. Python) in another MLX +front-end (e.g. C++). + +This guide walks through the basics of the MLX export API with some examples. +To see the full list of functions check-out the :ref:`API documentation +`. + +Basics of Exporting +------------------- + +Let's start with a simple example: + +.. code-block:: python + + def fun(x, y): + return x + y + + x = mx.array(1.0) + y = mx.array(1.0) + mx.export_function("add.mlxfn", fun, x, y) + +To export a function, provide sample input arrays that the function +can be called with. The data doesn't matter, but the shapes and types of the +arrays do. In the above example we exported ``fun`` with two ``float32`` +scalar arrays. We can then import the function and run it: + +.. code-block:: python + + add_fun = mx.import_function("add.mlxfn") + + out, = add_fun(mx.array(1.0), mx.array(2.0)) + # Prints: array(3, dtype=float32) + print(out) + + out, = add_fun(mx.array(1.0), mx.array(3.0)) + # Prints: array(4, dtype=float32) + print(out) + + # Raises an exception + add_fun(mx.array(1), mx.array(3.0)) + + # Raises an exception + add_fun(mx.array([1.0, 2.0]), mx.array(3.0)) + +Notice the third and fourth calls to ``add_fun`` raise exceptions because the +shapes and types of the inputs are different than the shapes and types of the +example inputs we exported the function with. + +Also notice that even though the original ``fun`` returns a single output +array, the imported function always returns a tuple of one or more arrays. + +The inputs to :func:`export_function` and to an imported function can be +specified as variable positional arguments or as a tuple of arrays: + +.. code-block:: python + + def fun(x, y): + return x + y + + x = mx.array(1.0) + y = mx.array(1.0) + + # Both arguments to fun are positional + mx.export_function("add.mlxfn", fun, x, y) + + # Same as above + mx.export_function("add.mlxfn", fun, (x, y)) + + imported_fun = mx.import_function("add.mlxfn") + + # Ok + out, = imported_fun(x, y) + + # Also ok + out, = imported_fun((x, y)) + +You can pass example inputs to functions as positional or keyword arguments. If +you use keyword arguments to export the function, then you have to use the same +keyword arguments when calling the imported function. + +.. code-block:: python + + def fun(x, y): + return x + y + + # One argument to fun is positional, the other is a kwarg + mx.export_function("add.mlxfn", fun, x, y=y) + + imported_fun = mx.import_function("add.mlxfn") + + # Ok + out, = imported_fun(x, y=y) + + # Also ok + out, = imported_fun((x,), {"y": y}) + + # Raises since the keyword argument is missing + out, = imported_fun(x, y) + + # Raises since the keyword argument has the wrong key + out, = imported_fun(x, z=y) + + +Exporting Modules +----------------- + +An :obj:`mlx.nn.Module` can be exported with or without the parameters included +in the exported function. Here's an example: + +.. code-block:: python + + model = nn.Linear(4, 4) + mx.eval(model.parameters()) + + def call(x): + return model(x) + + mx.export_function("model.mlxfn", call, mx.zeros(4)) + +In the above example, the :obj:`mlx.nn.Linear` module is exported. Its +parameters are also saved to the ``model.mlxfn`` file. + +.. note:: + + For enclosed arrays inside an exported function, be extra careful to ensure + they are evaluated. The computation graph that gets exported will include + the computation that produces enclosed inputs. + + If the above example was missing ``mx.eval(model.parameters()``, the + exported function would include the random initialization of the + :obj:`mlx.nn.Module` parameters. + +If you only want to export the ``Module.__call__`` function without the +parameters, pass them as inputs to the ``call`` wrapper: + +.. code-block:: python + + model = nn.Linear(4, 4) + mx.eval(model.parameters()) + + def call(x, **params): + # Set the model's parameters to the input parameters + model.update(tree_unflatten(list(params.items()))) + return model(x) + + params = dict(tree_flatten(model.parameters())) + mx.export_function("model.mlxfn", call, (mx.zeros(4),), params) + + +Shapeless Exports +----------------- + +Just like :func:`compile`, functions can also be exported for dynamically shaped +inputs. Pass ``shapeless=True`` to :func:`export_function` or :func:`exporter` +to export a function which can be used for inputs with variable shapes: + +.. code-block:: python + + mx.export_function("fun.mlxfn", mx.abs, mx.array(0.0), shapeless=True) + imported_abs = mx.import_function("fun.mlxfn") + + # Ok + out, = imported_abs(mx.array(-1.0)) + + # Also ok + out, = imported_abs(mx.array([-1.0, -2.0])) + +With ``shapeless=False`` (which is the default), the second call to +``imported_abs`` would raise an exception with a shape mismatch. + +Shapeless exporting works the same as shapeless compilation and should be +used carefully. See the :ref:`documentation on shapeless compilation +` for more information. + +Exporting Multiple Traces +------------------------- + +In some cases, functions build different computation graphs for different +input arguments. A simple way to manage this is to export to a new file with +each set of inputs. This is a fine option in many cases. But it can be +suboptimal if the exported functions have a large amount of duplicate constant +data (for example the parameters of a :obj:`mlx.nn.Module`). + +The export API in MLX lets you export multiple traces of the same function to +a single file by creating an exporting context manager with :func:`exporter`: + +.. code-block:: python + + def fun(x, y=None): + constant = mx.array(3.0) + if y is not None: + x += y + return x + constant + + with mx.exporter("fun.mlxfn", fun) as exporter: + exporter(mx.array(1.0)) + exporter(mx.array(1.0), y=mx.array(0.0)) + + imported_function = mx.import_function("fun.mlxfn") + + # Call the function with y=None + out, = imported_function(mx.array(1.0)) + print(out) + + # Call the function with y specified + out, = imported_function(mx.array(1.0), y=mx.array(1.0)) + print(out) + +In the above example the function constant data, (i.e. ``constant``), is only +saved once. + +Transformations with Imported Functions +--------------------------------------- + +Function transformations like :func:`grad`, :func:`vmap`, and :func:`compile` work +on imported functions just like regular Python functions: + +.. code-block:: python + + def fun(x): + return mx.sin(x) + + x = mx.array(0.0) + mx.export_function("sine.mlxfn", fun, x) + + imported_fun = mx.import_function("sine.mlxfn") + + # Take the derivative of the imported function + dfdx = mx.grad(lambda x: imported_fun(x)[0]) + # Prints: array(1, dtype=float32) + print(dfdx(x)) + + # Compile the imported function + mx.compile(imported_fun) + # Prints: array(0, dtype=float32) + print(compiled_fun(x)[0]) + + +Importing Functions in C++ +-------------------------- + +Importing and running functions in C++ is basically the same as importing and +running them in Python. First, follow the :ref:`instructions ` to +setup a simple C++ project that uses MLX as a library. + +Next, export a simple function from Python: + +.. code-block:: python + + def fun(x, y): + return mx.exp(x + y) + + x = mx.array(1.0) + y = mx.array(1.0) + mx.export_function("fun.mlxfn", fun, x, y) + + +Import and run the function in C++ with only a few lines of code: + +.. code-block:: c++ + + auto fun = mx::import_function("fun.mlxfn"); + + auto inputs = {mx::array(1.0), mx::array(1.0)}; + auto outputs = fun(inputs); + + // Prints: array(2, dtype=float32) + std::cout << outputs[0] << std::endl; + +Imported functions can be transformed in C++ just like in Python. Use +``std::vector`` for positional arguments and ``std::map`` for keyword arguments when calling imported functions in C++. + +More Examples +------------- + +Here are a few more complete examples exporting more complex functions from +Python and importing and running them in C++: + +* `Inference and training a multi-layer perceptron `_ diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 2af6139e6..f316efcb4 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -55,7 +55,7 @@ div.sphinxsidebarwrapper { div.sphinxsidebar { float: left; - width: 270px; + width: 230px; margin-left: -100%; font-size: 90%; word-wrap: break-word; diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js index da9531643..c4eb24305 100644 --- a/docs/build/html/_static/documentation_options.js +++ b/docs/build/html/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '0.21.1', + VERSION: '0.22.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css index 012e6a00a..d7dd57783 100644 --- a/docs/build/html/_static/pygments.css +++ b/docs/build/html/_static/pygments.css @@ -6,11 +6,11 @@ html[data-theme="light"] .highlight span.linenos.special { color: #000000; backg html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ -html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ -html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ -html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .err { color: #A12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730C5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7F4707 } /* Literal */ html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ -html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .o { color: #00622F } /* Operator */ html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ @@ -18,135 +18,135 @@ html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ -html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .gd { color: #005B82 } /* Generic.Deleted */ html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ -html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gh { color: #005B82 } /* Generic.Heading */ html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ -html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ -html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ -html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ -html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ -html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ -html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ -html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ -html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ -html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ -html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .gu { color: #005B82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730C5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730C5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730C5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730C5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730C5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7F4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7F4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7F4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622F } /* Literal.String */ html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ -html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ -html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ -html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ -html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ -html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ -html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ -html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ -html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nb { color: #7F4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005B82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005B82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7F4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622F } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730C5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005B82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7F4707 } /* Name.Label */ html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ -html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ -html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ -html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ -html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .py { color: #005B82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005B82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #A12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730C5 } /* Operator.Word */ html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ -html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ -html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ -html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ -html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ -html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ -html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ -html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ -html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ -html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ -html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ -html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ -html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ -html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ -html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ -html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ -html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ -html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ -html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ -html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ -html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ -html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ -html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ -html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ -html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ -html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ +html[data-theme="light"] .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7F4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622F } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622F } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622F } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622F } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622F } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622F } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622F } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622F } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622F } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622F } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #A12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622F } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005B82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005B82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #A12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #A12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #A12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */ html[data-theme="dark"] .highlight pre { line-height: 125%; } html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } -html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } -html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ -html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ -html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ -html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ -html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ -html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ -html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ -html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ -html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ -html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ -html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ -html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ -html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ -html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #F8F8F2 } +html[data-theme="dark"] .highlight .c { color: #FFD900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #FFA07A } /* Error */ +html[data-theme="dark"] .highlight .k { color: #DCC6E0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #FFD900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #F8F8F2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #ABE338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #F8F8F2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #FFD900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #FFD900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #FFD900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #FFD900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #FFD900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #FFD900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00E0E0 } /* Generic.Deleted */ html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ -html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gh { color: #00E0E0 } /* Generic.Heading */ html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ -html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ -html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ -html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ -html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ -html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ -html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ -html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ -html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ -html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ -html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ -html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ -html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ -html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ -html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ -html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ -html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ -html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ -html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ -html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ -html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ -html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ -html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ -html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ -html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ -html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ -html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ -html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ -html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ -html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ -html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ -html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ -html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ -html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ -html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ -html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ -html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ -html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ -html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ -html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ -html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ -html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ -html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ -html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ -html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ -html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ -html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ -html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ -html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ -html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ -html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ -html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ -html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file +html[data-theme="dark"] .highlight .gu { color: #00E0E0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #DCC6E0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #DCC6E0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #DCC6E0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #DCC6E0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #DCC6E0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #FFD900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #FFD900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #FFD900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #ABE338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #FFD900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #FFD900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00E0E0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00E0E0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #FFD900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #ABE338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #DCC6E0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00E0E0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #FFD900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #F8F8F2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #F8F8F2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00E0E0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00E0E0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #FFA07A } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #DCC6E0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #F8F8F2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #FFD900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #FFD900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #FFD900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #FFD900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #FFD900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #ABE338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #ABE338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #ABE338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #ABE338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #ABE338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #ABE338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #ABE338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #ABE338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #ABE338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #ABE338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #FFA07A } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #ABE338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00E0E0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #FFD900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00E0E0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #FFA07A } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #FFA07A } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #FFA07A } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #FFD900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #FFD900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/build/html/_static/scripts/pydata-sphinx-theme.js b/docs/build/html/_static/scripts/pydata-sphinx-theme.js index ae0c7262f..771fed0d2 100644 --- a/docs/build/html/_static/scripts/pydata-sphinx-theme.js +++ b/docs/build/html/_static/scripts/pydata-sphinx-theme.js @@ -1,2 +1,2 @@ -(()=>{"use strict";function e(e){"loading"!=document.readyState?e():document.addEventListener("DOMContentLoaded",e)}const t=e=>"string"==typeof e&&/^[v\d]/.test(e)&&o.test(e),n=(e,t,n)=>{u(n);const o=((e,t)=>{const n=r(e),o=r(t),a=n.pop(),s=o.pop(),c=i(n,o);return 0!==c?c:a&&s?i(a.split("."),s.split(".")):a||s?a?-1:1:0})(e,t);return d[n].includes(o)},o=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,r=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(o);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},a=e=>"*"===e||"x"===e||"X"===e,s=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},c=(e,t)=>{if(a(e)||a(t))return 0;const[n,o]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(s(e),s(t));return n>o?1:n{for(let n=0;n":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},l=Object.keys(d),u=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===l.indexOf(e))throw new Error(`Invalid operator, expected one of ${l.join("|")}`)};var m=window.matchMedia("(prefers-color-scheme: dark)");function h(e){document.documentElement.dataset.theme=m.matches?"dark":"light"}function p(e){"light"!==e&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto");var t=m.matches?"dark":"light";document.documentElement.dataset.mode=e;var n="auto"==e?t:e;document.documentElement.dataset.theme=n,document.querySelectorAll(".dropdown-menu").forEach((e=>{"dark"===n?e.classList.add("dropdown-menu-dark"):e.classList.remove("dropdown-menu-dark")})),localStorage.setItem("mode",e),localStorage.setItem("theme",n),console.log(`[PST]: Changed to ${e} mode using the ${n} theme.`),m.onchange="auto"==e?h:""}function f(){const e=document.documentElement.dataset.defaultMode||"auto",t=localStorage.getItem("mode")||e;var n,o;p(((o=(n=m.matches?["auto","light","dark"]:["auto","dark","light"]).indexOf(t)+1)===n.length&&(o=0),n[o]))}var g=()=>{let e=document.querySelectorAll("form.bd-search");return e.length?(1==e.length?e[0]:document.querySelector(":not(#pst-search-dialog) > form.bd-search")).querySelector("input"):void 0},v=()=>{const e=g(),t=document.getElementById("pst-search-dialog");e===t.querySelector("input")?t.open?t.close():t.showModal():document.activeElement===e?e.blur():(e.focus(),e.select(),e.scrollIntoView({block:"center"}))},y=0===navigator.platform.indexOf("Mac")||"iPhone"===navigator.platform;const E=({currentTarget:e,clientX:t,clientY:n})=>{if(!e.open)return;const{left:o,right:r,top:a,bottom:s}=e.getBoundingClientRect();(t"dirhtml"==DOCUMENTATION_OPTIONS.BUILDER?DOCUMENTATION_OPTIONS.pagename.endsWith("index")?`${DOCUMENTATION_OPTIONS.pagename.substring(0,DOCUMENTATION_OPTIONS.pagename.length-5)}`:`${DOCUMENTATION_OPTIONS.pagename}/`:`${DOCUMENTATION_OPTIONS.pagename}.html`;async function T(e){document.querySelector("#bd-header-version-warning").remove();const t=DOCUMENTATION_OPTIONS.VERSION,n=new Date,o=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}");console.debug(`[PST] Dismissing the version warning banner on ${t} starting ${n}.`),o[t]=n,localStorage.setItem("pst_banner_pref",JSON.stringify(o))}async function b(e){e.preventDefault();const t=w();let n=e.currentTarget.getAttribute("href"),o=n.replace(t,"");try{(await fetch(n,{method:"HEAD"})).ok?location.href=n:location.href=o}catch(e){location.href=o}}async function S(){var e=document.querySelectorAll(".version-switcher__button");const o=e.length>0,r=DOCUMENTATION_OPTIONS.hasOwnProperty("theme_switcher_json_url"),a=DOCUMENTATION_OPTIONS.show_version_warning_banner;if(r&&(o||a)){const o=await async function(e){try{var t=new URL(e)}catch(n){if(!(n instanceof TypeError))throw n;{if(!window.location.origin)return null;const n=await fetch(window.location.origin,{method:"HEAD"});t=new URL(e,n.url)}}const n=await fetch(t);return await n.json()}(DOCUMENTATION_OPTIONS.theme_switcher_json_url);o&&(function(e,t){const n=w();t.forEach((e=>{e.dataset.activeVersionName="",e.dataset.activeVersion=""}));const o=(e=e.map((e=>(e.match=e.version==DOCUMENTATION_OPTIONS.theme_switcher_version_match,e.preferred=e.preferred||!1,"name"in e||(e.name=e.version),e)))).map((e=>e.preferred&&e.match)).some(Boolean);var r=!1;e.forEach((e=>{const a=document.createElement("a");a.setAttribute("class","dropdown-item list-group-item list-group-item-action py-1"),a.setAttribute("href",`${e.url}${n}`),a.setAttribute("role","option");const s=document.createElement("span");s.textContent=`${e.name}`,a.appendChild(s),a.dataset.versionName=e.name,a.dataset.version=e.version;let c=o&&e.preferred,i=!o&&!r&&e.match;(c||i)&&(a.classList.add("active"),t.forEach((t=>{t.innerText=e.name,t.dataset.activeVersionName=e.name,t.dataset.activeVersion=e.version})),r=!0),document.querySelectorAll(".version-switcher__menu").forEach((e=>{let t=a.cloneNode(!0);t.onclick=b,e.append(t)}))}))}(o,e),a&&function(e){var o=DOCUMENTATION_OPTIONS.VERSION,r=e.filter((e=>e.preferred));if(1!==r.length){const e=0==r.length?"No":"Multiple";return void console.log(`[PST] ${e} versions marked "preferred" found in versions JSON, ignoring.`)}const a=r[0].version,s=r[0].url,c=t(o)&&t(a);if(c&&n(o,a,"="))return void console.log("[PST]: This is the preferred version of the docs, not showing the warning banner.");const i=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}")[o];if(null!=i){const e=new Date(i),t=(new Date-e)/864e5;if(t<14)return void console.info(`[PST] Suppressing version warning banner; was dismissed ${Math.floor(t)} day(s) ago`)}const d=document.querySelector("#bd-header-version-warning"),l=document.createElement("div"),u=document.createElement("div"),m=document.createElement("strong"),h=document.createElement("a"),p=document.createElement("a");l.classList="bd-header-announcement__content ms-auto me-auto",u.classList="sidebar-message",h.classList="btn text-wrap font-weight-bold ms-3 my-1 align-baseline pst-button-link-to-stable-version",h.href=`${s}${w()}`,h.innerText="Switch to stable version",h.onclick=b,p.classList="ms-3 my-1 align-baseline";const f=document.createElement("i");p.append(f),f.classList="fa-solid fa-xmark",p.onclick=T,u.innerText="This is documentation for ";const g=o.includes("dev")||o.includes("rc")||o.includes("pre"),v=c&&n(o,a,">");g||v?m.innerText="an unstable development version":c&&n(o,a,"<")?m.innerText=`an old version (${o})`:m.innerText=o?`version ${o}`:"an unknown version",d.appendChild(l),d.append(p),l.appendChild(u),u.appendChild(m),u.appendChild(document.createTextNode(".")),u.appendChild(h),d.classList.remove("d-none")}(o))}}function O(){const e=()=>{document.querySelectorAll(["pre",".nboutput > .output_area",".cell_output > .output",".jp-RenderedHTMLCommon",".pst-scrollable-table-container"].join(", ")).forEach((e=>{e.tabIndex=e.scrollWidth>e.clientWidth||e.scrollHeight>e.clientHeight?0:-1}))},t=function(e,t){let n=null;return(...t)=>{clearTimeout(n),n=setTimeout((()=>{e(...t)}),300)}}(e);window.addEventListener("resize",t),new MutationObserver(t).observe(document.getElementById("main-content"),{subtree:!0,childList:!0}),e()}async function N(){const e=document.querySelector(".bd-header-announcement"),{pstAnnouncementUrl:t}=e?e.dataset:null;if(t)try{const n=await fetch(t);if(!n.ok)throw new Error(`[PST]: HTTP response status not ok: ${n.status} ${n.statusText}`);const o=await n.text();if(0===o.length)return void console.log(`[PST]: Empty announcement at: ${t}`);e.innerHTML=`
${o}
`,e.classList.remove("d-none")}catch(e){console.log(`[PST]: Failed to load announcement at: ${t}`),console.error(e)}}e((async function(){await Promise.allSettled([S(),N()]);const e=document.querySelector(".pst-async-banner-revealer");if(!e)return;e.classList.remove("d-none");const t=Array.from(e.children).reduce(((e,t)=>e+t.offsetHeight),0);e.style.setProperty("height",`${t}px`),setTimeout((()=>{e.style.setProperty("height","auto")}),320)})),e((function(){p(document.documentElement.dataset.mode),document.querySelectorAll(".theme-switch-button").forEach((e=>{e.addEventListener("click",f)}))})),e((function(){if(!document.querySelector(".bd-docs-nav"))return;var e=document.querySelector("div.bd-sidebar");let t=parseInt(sessionStorage.getItem("sidebar-scroll-top"),10);if(isNaN(t)){var n=document.querySelector(".bd-docs-nav").querySelectorAll(".active");if(n.length>0){var o=n[n.length-1],r=o.getBoundingClientRect().y-e.getBoundingClientRect().y;if(o.getBoundingClientRect().y>.5*window.innerHeight){let t=.25;e.scrollTop=r-e.clientHeight*t,console.log("[PST]: Scrolled sidebar using last active link...")}}}else e.scrollTop=t,console.log("[PST]: Scrolled sidebar using stored browser position...");window.addEventListener("beforeunload",(()=>{sessionStorage.setItem("sidebar-scroll-top",e.scrollTop)}))})),e((function(){window.addEventListener("activate.bs.scrollspy",(function(){document.querySelectorAll(".bd-toc-nav a").forEach((e=>{e.parentElement.classList.remove("active")})),document.querySelectorAll(".bd-toc-nav a.active").forEach((e=>{e.parentElement.classList.add("active")}))}))})),e((()=>{(()=>{let e=document.querySelectorAll(".search-button__kbd-shortcut");y&&e.forEach((e=>e.querySelector("kbd.kbd-shortcut__modifier").innerText="⌘"))})(),window.addEventListener("keydown",(e=>{let t=g();e.shiftKey||e.altKey||(y?!e.metaKey||e.ctrlKey:e.metaKey||!e.ctrlKey)||!/^k$/i.test(e.key)?document.activeElement===t&&/Escape/i.test(e.key)&&v():(e.preventDefault(),v())}),!0),document.querySelectorAll(".search-button__button").forEach((e=>{e.onclick=v})),document.getElementById("pst-search-dialog").addEventListener("click",E)})),e((function(){new MutationObserver(((e,t)=>{e.forEach((e=>{0!==e.addedNodes.length&&void 0!==e.addedNodes[0].data&&-1!=e.addedNodes[0].data.search("Inserted RTD Footer")&&e.addedNodes.forEach((e=>{document.getElementById("rtd-footer-container").append(e)}))}))})).observe(document.body,{childList:!0})})),e((function(){const e=document.getElementById("pst-primary-sidebar"),t=document.getElementById("pst-secondary-sidebar"),n=document.getElementById("pst-primary-sidebar-modal"),o=document.getElementById("pst-secondary-sidebar-modal"),r=document.querySelector(".primary-toggle"),a=document.querySelector(".secondary-toggle"),s=(e,t)=>{Array.from(e.childNodes).forEach((e=>t.appendChild(e))),Array.from(e.classList).forEach((n=>{e.classList.remove(n),t.classList.add(n)}))};[[r,n,e],[a,o,t]].forEach((([e,t,n])=>{e&&t&&n&&(e.addEventListener("click",(e=>{e.preventDefault(),e.stopPropagation(),s(n,t),t.showModal()})),t.addEventListener("click",E),t.addEventListener("keydown",(e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),t.close())})),t.addEventListener("close",(()=>{s(t,n)})))}))})),"complete"===document.readyState?O():window.addEventListener("load",O)})(); +(()=>{"use strict";function e(e){"loading"!=document.readyState?e():document.addEventListener("DOMContentLoaded",e)}const t=e=>"string"==typeof e&&/^[v\d]/.test(e)&&o.test(e),n=(e,t,n)=>{u(n);const o=((e,t)=>{const n=r(e),o=r(t),a=n.pop(),s=o.pop(),i=c(n,o);return 0!==i?i:a&&s?c(a.split("."),s.split(".")):a||s?a?-1:1:0})(e,t);return l[n].includes(o)},o=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,r=e=>{if("string"!=typeof e)throw new TypeError("Invalid argument expected string");const t=e.match(o);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},a=e=>"*"===e||"x"===e||"X"===e,s=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},i=(e,t)=>{if(a(e)||a(t))return 0;const[n,o]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(s(e),s(t));return n>o?1:n{for(let n=0;n":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},d=Object.keys(l),u=e=>{if("string"!=typeof e)throw new TypeError("Invalid operator type, expected string but got "+typeof e);if(-1===d.indexOf(e))throw new Error(`Invalid operator, expected one of ${d.join("|")}`)};var m=window.matchMedia("(prefers-color-scheme: dark)");function h(e){document.documentElement.dataset.theme=m.matches?"dark":"light"}function p(e){"light"!==e&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto");var t=m.matches?"dark":"light";document.documentElement.dataset.mode=e;var n="auto"==e?t:e;document.documentElement.dataset.theme=n,document.querySelectorAll(".dropdown-menu").forEach((e=>{"dark"===n?e.classList.add("dropdown-menu-dark"):e.classList.remove("dropdown-menu-dark")})),localStorage.setItem("mode",e),localStorage.setItem("theme",n),console.log(`[PST]: Changed to ${e} mode using the ${n} theme.`),m.onchange="auto"==e?h:""}function f(){const e=document.documentElement.dataset.defaultMode||"auto",t=localStorage.getItem("mode")||e;var n,o;p(((o=(n=m.matches?["auto","light","dark"]:["auto","dark","light"]).indexOf(t)+1)===n.length&&(o=0),n[o]))}var g=()=>{let e=document.querySelectorAll("form.bd-search");return e.length?(1==e.length?e[0]:document.querySelector(":not(#pst-search-dialog) > form.bd-search")).querySelector("input"):void 0},v=()=>{const e=g(),t=document.getElementById("pst-search-dialog");e===t.querySelector("input")?t.open?t.close():t.showModal():document.activeElement===e?e.blur():(e.focus(),e.select(),e.scrollIntoView({block:"center"}))},y=0===navigator.platform.indexOf("Mac")||"iPhone"===navigator.platform;const w=({currentTarget:e,clientX:t,clientY:n})=>{if(!e.open)return;const{left:o,right:r,top:a,bottom:s}=e.getBoundingClientRect();(t"dirhtml"==DOCUMENTATION_OPTIONS.BUILDER?DOCUMENTATION_OPTIONS.pagename.endsWith("index")?`${DOCUMENTATION_OPTIONS.pagename.substring(0,DOCUMENTATION_OPTIONS.pagename.length-5)}`:`${DOCUMENTATION_OPTIONS.pagename}/`:`${DOCUMENTATION_OPTIONS.pagename}.html`;async function T(e){document.querySelector("#bd-header-version-warning").remove();const t=DOCUMENTATION_OPTIONS.VERSION,n=new Date,o=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}");console.debug(`[PST] Dismissing the version warning banner on ${t} starting ${n}.`),o[t]=n,localStorage.setItem("pst_banner_pref",JSON.stringify(o))}async function S(e){e.preventDefault();const t=E();let n=e.currentTarget.getAttribute("href"),o=n.replace(t,"");try{(await fetch(n,{method:"HEAD"})).ok?location.href=n:location.href=o}catch(e){location.href=o}}async function b(){var e=document.querySelectorAll(".version-switcher__button");const o=e.length>0,r=DOCUMENTATION_OPTIONS.hasOwnProperty("theme_switcher_json_url"),a=DOCUMENTATION_OPTIONS.show_version_warning_banner;if(r&&(o||a)){const o=await async function(e){const t=E();try{var n=new URL(e)}catch(o){if(!(o instanceof TypeError))throw o;{"file:"==window.location.protocol&&console.info("[PST] looks like you're viewing this site from a local filesystem, so the version switcher won't work unless you've disabled CORS. See https://pydata-sphinx-theme.readthedocs.io/en/stable/user_guide/version-dropdown.html");const o=window.location.href.indexOf(t),r=-1==o?window.location.href:window.location.href.substring(0,o);n=new URL(e,r)}}const o=await fetch(n);return await o.json()}(DOCUMENTATION_OPTIONS.theme_switcher_json_url);o&&(function(e,t){const n=E();t.forEach((e=>{e.dataset.activeVersionName="",e.dataset.activeVersion=""}));const o=(e=e.map((e=>(e.match=e.version==DOCUMENTATION_OPTIONS.theme_switcher_version_match,e.preferred=e.preferred||!1,"name"in e||(e.name=e.version),e)))).map((e=>e.preferred&&e.match)).some(Boolean);var r=!1;e.forEach((e=>{const a=document.createElement("a");a.setAttribute("class","dropdown-item list-group-item list-group-item-action py-1"),a.setAttribute("href",`${e.url}${n}`),a.setAttribute("role","option");const s=document.createElement("span");s.textContent=`${e.name}`,a.appendChild(s),a.dataset.versionName=e.name,a.dataset.version=e.version;let i=o&&e.preferred,c=!o&&!r&&e.match;(i||c)&&(a.classList.add("active"),t.forEach((t=>{t.innerText=e.name,t.dataset.activeVersionName=e.name,t.dataset.activeVersion=e.version})),r=!0),document.querySelectorAll(".version-switcher__menu").forEach((e=>{let t=a.cloneNode(!0);t.onclick=S,e.append(t)}))}))}(o,e),a&&function(e){var o=DOCUMENTATION_OPTIONS.VERSION,r=e.filter((e=>e.preferred));if(1!==r.length){const e=0==r.length?"No":"Multiple";return void console.log(`[PST] ${e} versions marked "preferred" found in versions JSON, ignoring.`)}const a=r[0].version,s=r[0].url,i=t(o)&&t(a);if(i&&n(o,a,"="))return void console.log("[PST]: This is the preferred version of the docs, not showing the warning banner.");const c=JSON.parse(localStorage.getItem("pst_banner_pref")||"{}")[o];if(null!=c){const e=new Date(c),t=(new Date-e)/864e5;if(t<14)return void console.info(`[PST] Suppressing version warning banner; was dismissed ${Math.floor(t)} day(s) ago`)}const l=document.querySelector("#bd-header-version-warning"),d=document.createElement("div"),u=document.createElement("div"),m=document.createElement("strong"),h=document.createElement("a"),p=document.createElement("a");d.classList="bd-header-announcement__content ms-auto me-auto",u.classList="sidebar-message",h.classList="btn text-wrap font-weight-bold ms-3 my-1 align-baseline pst-button-link-to-stable-version",h.href=`${s}${E()}`,h.innerText="Switch to stable version",h.onclick=S,p.classList="ms-3 my-1 align-baseline";const f=document.createElement("i");p.append(f),f.classList="fa-solid fa-xmark",p.onclick=T,u.innerText="This is documentation for ";const g=o.includes("dev")||o.includes("rc")||o.includes("pre"),v=i&&n(o,a,">");g||v?m.innerText="an unstable development version":i&&n(o,a,"<")?m.innerText=`an old version (${o})`:m.innerText=o?`version ${o}`:"an unknown version",l.appendChild(d),l.append(p),d.appendChild(u),u.appendChild(m),u.appendChild(document.createTextNode(".")),u.appendChild(h),l.classList.remove("d-none")}(o))}}function O(){const e=()=>{document.querySelectorAll(["pre",".nboutput > .output_area",".cell_output > .output",".jp-RenderedHTMLCommon",".pst-scrollable-table-container"].join(", ")).forEach((e=>{e.tabIndex=e.scrollWidth>e.clientWidth||e.scrollHeight>e.clientHeight?0:-1}))},t=function(e,t){let n=null;return(...t)=>{clearTimeout(n),n=setTimeout((()=>{e(...t)}),300)}}(e);window.addEventListener("resize",t),new MutationObserver(t).observe(document.getElementById("main-content"),{subtree:!0,childList:!0}),e()}async function N(){const e=document.querySelector(".bd-header-announcement"),{pstAnnouncementUrl:t}=e?e.dataset:null;if(t)try{const n=await fetch(t);if(!n.ok)throw new Error(`[PST]: HTTP response status not ok: ${n.status} ${n.statusText}`);const o=await n.text();if(0===o.length)return void console.log(`[PST]: Empty announcement at: ${t}`);e.innerHTML=`
${o}
`,e.classList.remove("d-none")}catch(e){console.log(`[PST]: Failed to load announcement at: ${t}`),console.error(e)}}e((async function(){await Promise.allSettled([b(),N()]);const e=document.querySelector(".pst-async-banner-revealer");if(!e)return;e.classList.remove("d-none");const t=Array.from(e.children).reduce(((e,t)=>e+t.offsetHeight),0);e.style.setProperty("height",`${t}px`),setTimeout((()=>{e.style.setProperty("height","auto")}),320)})),e((function(){p(document.documentElement.dataset.mode),document.querySelectorAll(".theme-switch-button").forEach((e=>{e.addEventListener("click",f)}))})),e((function(){if(!document.querySelector(".bd-docs-nav"))return;var e=document.querySelector("div.bd-sidebar");let t=parseInt(sessionStorage.getItem("sidebar-scroll-top"),10);if(isNaN(t)){var n=document.querySelector(".bd-docs-nav").querySelectorAll(".active");if(n.length>0){var o=n[n.length-1],r=o.getBoundingClientRect().y-e.getBoundingClientRect().y;if(o.getBoundingClientRect().y>.5*window.innerHeight){let t=.25;e.scrollTop=r-e.clientHeight*t,console.log("[PST]: Scrolled sidebar using last active link...")}}}else e.scrollTop=t,console.log("[PST]: Scrolled sidebar using stored browser position...");window.addEventListener("beforeunload",(()=>{sessionStorage.setItem("sidebar-scroll-top",e.scrollTop)}))})),e((function(){window.addEventListener("activate.bs.scrollspy",(function(){document.querySelectorAll(".bd-toc-nav a").forEach((e=>{e.parentElement.classList.remove("active")})),document.querySelectorAll(".bd-toc-nav a.active").forEach((e=>{e.parentElement.classList.add("active")}))}))})),e((()=>{(()=>{let e=document.querySelectorAll(".search-button__kbd-shortcut");y&&e.forEach((e=>e.querySelector("kbd.kbd-shortcut__modifier").innerText="⌘"))})(),window.addEventListener("keydown",(e=>{let t=g();e.shiftKey||e.altKey||(y?!e.metaKey||e.ctrlKey:e.metaKey||!e.ctrlKey)||!/^k$/i.test(e.key)?document.activeElement===t&&/Escape/i.test(e.key)&&v():(e.preventDefault(),v())}),!0),document.querySelectorAll(".search-button__button").forEach((e=>{e.onclick=v})),document.getElementById("pst-search-dialog").addEventListener("click",w)})),e((function(){const e=document.getElementById("pst-primary-sidebar"),t=document.getElementById("pst-secondary-sidebar"),n=document.getElementById("pst-primary-sidebar-modal"),o=document.getElementById("pst-secondary-sidebar-modal"),r=document.querySelector(".primary-toggle"),a=document.querySelector(".secondary-toggle"),s=(e,t)=>{Array.from(e.childNodes).forEach((e=>t.appendChild(e))),Array.from(e.classList).forEach((n=>{e.classList.remove(n),t.classList.add(n)}))};[[r,n,e],[a,o,t]].forEach((([e,t,n])=>{e&&t&&n&&(e.addEventListener("click",(e=>{e.preventDefault(),e.stopPropagation(),s(n,t),t.showModal()})),t.addEventListener("click",w),t.addEventListener("keydown",(e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),t.close())})),t.addEventListener("close",(()=>{s(t,n)})))}))})),"complete"===document.readyState?O():window.addEventListener("load",O)})(); //# sourceMappingURL=pydata-sphinx-theme.js.map \ No newline at end of file diff --git a/docs/build/html/_static/scripts/pydata-sphinx-theme.js.map b/docs/build/html/_static/scripts/pydata-sphinx-theme.js.map index e621d1085..0ed1d5e5a 100644 --- a/docs/build/html/_static/scripts/pydata-sphinx-theme.js.map +++ b/docs/build/html/_static/scripts/pydata-sphinx-theme.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts/pydata-sphinx-theme.js","mappings":"mBASO,SAASA,EAAcC,GACD,WAAvBC,SAASC,WAAyBF,IACjCC,SAASE,iBAAiB,mBAAoBH,EACrD,CCLO,MAiCMI,EAAYC,GAA+B,iBAAZA,GAAwB,SAASC,KAAKD,IAAYE,EAAOD,KAAKD,GAkB7FG,EAAU,CAACC,EAAIC,EAAIC,KAE5BC,EAAoBD,GAGpB,MAAME,EAxDqB,EAACJ,EAAIC,KAEhC,MAAMI,EAAKC,EAAiBN,GACtBO,EAAKD,EAAiBL,GAEtBO,EAAKH,EAAGI,MACRC,EAAKH,EAAGE,MAERE,EAAIC,EAAgBP,EAAIE,GAC9B,OAAU,IAANI,EACOA,EAEPH,GAAME,EACCE,EAAgBJ,EAAGK,MAAM,KAAMH,EAAGG,MAAM,MAE1CL,GAAME,EACJF,GAAM,EAAI,EAEd,CAAC,EAsCIM,CAAgBd,EAAIC,GAChC,OAAOc,EAAeb,GAAUc,SAASZ,EAAI,EAgD3CN,EAAS,6IACTQ,EAAoBV,IACtB,GAAuB,iBAAZA,EACP,MAAM,IAAIqB,UAAU,oCAExB,MAAMC,EAAQtB,EAAQsB,MAAMpB,GAC5B,IAAKoB,EACD,MAAM,IAAIC,MAAM,uCAAuCvB,gBAG3D,OADAsB,EAAME,QACCF,CAAK,EAEVG,EAAcC,GAAY,MAANA,GAAmB,MAANA,GAAmB,MAANA,EAC9CC,EAAYC,IACd,MAAMC,EAAIC,SAASF,EAAG,IACtB,OAAOG,MAAMF,GAAKD,EAAIC,CAAC,EAGrBG,EAAiB,CAACC,EAAGC,KACvB,GAAIT,EAAWQ,IAAMR,EAAWS,GAC5B,OAAO,EACX,MAAOC,EAAIC,GAJG,EAACH,EAAGC,WAAaD,UAAaC,EAAI,CAACG,OAAOJ,GAAII,OAAOH,IAAM,CAACD,EAAGC,GAI5DI,CAAUX,EAASM,GAAIN,EAASO,IACjD,OAAIC,EAAKC,EACE,EACPD,EAAKC,GACG,EACL,CAAC,EAENpB,EAAkB,CAACiB,EAAGC,KACxB,IAAK,IAAIK,EAAI,EAAGA,EAAIC,KAAKC,IAAIR,EAAES,OAAQR,EAAEQ,QAASH,IAAK,CACnD,MAAMxB,EAAIiB,EAAeC,EAAEM,IAAM,IAAKL,EAAEK,IAAM,KAC9C,GAAU,IAANxB,EACA,OAAOA,CACf,CACA,OAAO,CAAC,EAENI,EAAiB,CACnB,IAAK,CAAC,GACN,KAAM,CAAC,EAAG,GACV,IAAK,CAAC,GACN,KAAM,EAAE,EAAG,GACX,IAAK,EAAE,IAELwB,EAAmBC,OAAOC,KAAK1B,GAC/BZ,EAAuBuC,IACzB,GAAkB,iBAAPA,EACP,MAAM,IAAIzB,UAAU,yDAAyDyB,GAEjF,IAAsC,IAAlCH,EAAiBI,QAAQD,GACzB,MAAM,IAAIvB,MAAM,qCAAqCoB,EAAiBK,KAAK,OAC/E,ECxJJ,IAAIC,EAAcC,OAAOC,WAAW,gCAOpC,SAASC,EAAUC,GACjBzD,SAAS0D,gBAAgBC,QAAQC,MAAQP,EAAYQ,QACjD,OACA,OACN,CAQA,SAASC,EAASC,GACH,UAATA,GAA6B,SAATA,GAA4B,SAATA,IACzCC,QAAQC,MAAM,2BAA2BF,yBACzCA,EAAO,QAIT,IAAIG,EAAcb,EAAYQ,QAAU,OAAS,QACjD7D,SAAS0D,gBAAgBC,QAAQI,KAAOA,EACxC,IAAIH,EAAgB,QAARG,EAAiBG,EAAcH,EAC3C/D,SAAS0D,gBAAgBC,QAAQC,MAAQA,EAGzC5D,SAASmE,iBAAiB,kBAAkBC,SAASC,IACrC,SAAVT,EACFS,EAAGC,UAAUC,IAAI,sBAEjBF,EAAGC,UAAUE,OAAO,qBACtB,IAIFC,aAAaC,QAAQ,OAAQX,GAC7BU,aAAaC,QAAQ,QAASd,GAC9BI,QAAQW,IAAI,qBAAqBZ,oBAAuBH,YAGxDP,EAAYuB,SAAmB,QAARb,EAAiBP,EAAY,EACtD,CAMA,SAASqB,IACP,MAAMC,EAAc9E,SAAS0D,gBAAgBC,QAAQmB,aAAe,OAC9DC,EAAcN,aAAaO,QAAQ,SAAWF,EAEpD,IAAiBG,EACXC,EAYNpB,IAZMoB,GADWD,EASF5B,EAAYQ,QACvB,CAAC,OAAQ,QAAS,QAClB,CAAC,OAAQ,OAAQ,UAVIV,QAWS4B,GAXU,KACrBE,EAAInC,SACvBoC,EAAe,GAEVD,EAAIC,IASf,CAsGA,IAAIC,EAAkB,KACpB,IAAIC,EAAQpF,SAASmE,iBAAiB,kBACtC,OAAKiB,EAAMtC,QAKW,GAAhBsC,EAAMtC,OAEDsC,EAAM,GAGNpF,SAASqF,cACd,8CAGQA,cAAc,cAZ1B,CAaF,EAQEC,EAAoB,KAEtB,MAAMC,EAAQJ,IAIRK,EAAexF,SAASyF,eAAe,qBAEzCF,IADgBC,EAAaH,cAAc,SAEzCG,EAAaE,KACfF,EAAaG,QAIbH,EAAaI,YAKX5F,SAAS6F,gBAAkBN,EAC7BA,EAAMO,QAENP,EAAMQ,QACNR,EAAMS,SACNT,EAAMU,eAAe,CAAEC,MAAO,WAElC,EA2CEC,EACoC,IAAtCC,UAAUC,SAASlD,QAAQ,QAAuC,WAAvBiD,UAAUC,SAevD,MAAMC,EAA6B,EACjCC,cAAeC,EACfC,UACAC,cAEA,IAAKF,EAAOd,KACV,OAMF,MAAM,KAAEiB,EAAI,MAAEC,EAAK,IAAEC,EAAG,OAAEC,GAAWN,EAAOO,yBAI1CN,EAAUE,GAAQC,EAAQH,GAAWC,EAAUG,GAAOC,EAASJ,IAG/DF,EAAOb,OACT,EAMF,IA2BIqB,EAAoB,IACe,WAAjCC,sBAAsBC,QACjBD,sBAAsBE,SAASC,SAAS,SAC3C,GAAGH,sBAAsBE,SAASE,UAAU,EAAGJ,sBAAsBE,SAASrE,OAAS,KACvF,GAAGmE,sBAAsBE,YAExB,GAAGF,sBAAsBE,gBAUlCG,eAAeC,EAA0BC,GACxBxH,SAASqF,cAAc,8BAC/Bb,SACP,MAAMpE,EAAU6G,sBAAsBQ,QAChCC,EAAM,IAAIC,KACVC,EAAcC,KAAKC,MACvBrD,aAAaO,QAAQ,oBAAsB,MAE7ChB,QAAQ+D,MACN,kDAAkD3H,cAAoBsH,MAExEE,EAAYxH,GAAWsH,EACvBjD,aAAaC,QAAQ,kBAAmBmD,KAAKG,UAAUJ,GACzD,CAQAN,eAAeW,EAA2BT,GAExCA,EAAMU,iBACN,MAAMC,EAAkBnB,IACxB,IAAIoB,EAASZ,EAAMjB,cAAc8B,aAAa,QAC1CC,EAAoBF,EAAOG,QAAQJ,EAAiB,IACxD,WACmBK,MAAMJ,EAAQ,CAAEK,OAAQ,UAChCC,GACPC,SAASC,KAAOR,EAEhBO,SAASC,KAAON,CAEpB,CAAE,MAAOO,GAEPF,SAASC,KAAON,CAClB,CACF,CAkPAhB,eAAewB,IAGb,IAAIC,EAAsB/I,SAASmE,iBACjC,6BAEF,MAAM6E,EAAkBD,EAAoBjG,OAAS,EAC/CmG,EAAkBhC,sBAAsBiC,eAC5C,2BAEIC,EAAqBlC,sBAAsBmC,4BAEjD,GAAIH,IAAoBD,GAAmBG,GAAqB,CAC9D,MAAME,QAxPV/B,eAAwCgC,GAEtC,IACE,IAAIC,EAAS,IAAIC,IAAIF,EACvB,CAAE,MAAOT,GACP,KAAIA,aAAepH,WAejB,MAAMoH,EAfsB,CAC5B,IAAKvF,OAAOqF,SAASc,OAMnB,OAAO,KAIT,MAAMA,QAAejB,MAAMlF,OAAOqF,SAASc,OAAQ,CAAEhB,OAAQ,SAC7Dc,EAAS,IAAIC,IAAIF,EAAKG,EAAOH,IAC/B,CAIF,CAEA,MAAMI,QAAiBlB,MAAMe,GAE7B,aADmBG,EAASC,MAE9B,CA6NuBC,CACjB3C,sBAAsB4C,yBAIpBR,IA/NR,SAAiCA,EAAMN,GACrC,MAAMZ,EAAkBnB,IACxB+B,EAAoB3E,SAAS0F,IAE3BA,EAAInG,QAA2B,kBAAI,GACnCmG,EAAInG,QAAuB,cAAI,EAAE,IAkBnC,MAAMoG,GAXNV,EAAOA,EAAKW,KAAKC,IAEfA,EAAMvI,MACJuI,EAAM7J,SAAW6G,sBAAsBiD,6BACzCD,EAAME,UAAYF,EAAME,YAAa,EAE/B,SAAUF,IACdA,EAAMG,KAAOH,EAAM7J,SAEd6J,MAGND,KAAKC,GAAUA,EAAME,WAAaF,EAAMvI,QACxC2I,KAAKC,SACR,IAAIC,GAAa,EAEjBlB,EAAKjF,SAAS6F,IAEZ,MAAMO,EAASxK,SAASyK,cAAc,KACtCD,EAAOE,aACL,QACA,6DAEFF,EAAOE,aAAa,OAAQ,GAAGT,EAAMX,MAAMnB,KAC3CqC,EAAOE,aAAa,OAAQ,UAC5B,MAAMC,EAAO3K,SAASyK,cAAc,QACpCE,EAAKC,YAAc,GAAGX,EAAMG,OAC5BI,EAAOK,YAAYF,GAGnBH,EAAO7G,QAAqB,YAAIsG,EAAMG,KACtCI,EAAO7G,QAAiB,QAAIsG,EAAM7J,QAIlC,IAAI0K,EAAwBf,GAA6BE,EAAME,UAC3DY,GACDhB,IAA8BQ,GAAcN,EAAMvI,OACjDoJ,GAAyBC,KAC3BP,EAAOlG,UAAUC,IAAI,UACrBwE,EAAoB3E,SAAS0F,IAC3BA,EAAIkB,UAAYf,EAAMG,KACtBN,EAAInG,QAA2B,kBAAIsG,EAAMG,KACzCN,EAAInG,QAAuB,cAAIsG,EAAM7J,OAAO,IAE9CmK,GAAa,GAIfvK,SAASmE,iBAAiB,2BAA2BC,SAAS6G,IAG5D,IAAIC,EAAOV,EAAOW,WAAU,GAC5BD,EAAKE,QAAUnD,EAIfgD,EAAKI,OAAOH,EAAK,GACjB,GAEN,CAwJMI,CAAwBjC,EAAMN,GAC1BI,GA3IV,SAAkCE,GAChC,IAAIjJ,EAAU6G,sBAAsBQ,QAEhC8D,EAAmBlC,EAAKmC,QAAQvB,GAAUA,EAAME,YACpD,GAAgC,IAA5BoB,EAAiBzI,OAAc,CACjC,MAAM2I,EAAqC,GAA3BF,EAAiBzI,OAAc,KAAO,WAItD,YAHAkB,QAAQW,IACN,SAAS8G,kEAGb,CACA,MAAMC,EAAmBH,EAAiB,GAAGnL,QACvCuL,EAAeJ,EAAiB,GAAGjC,IAEnCsC,EAAwBzL,EAASC,IAAYD,EAASuL,GAC5D,GAAIE,GAAyBrL,EAAQH,EAASsL,EAAkB,KAI9D,YAHA1H,QAAQW,IACN,qFAKJ,MAAMkH,EAAmBhE,KAAKC,MAC5BrD,aAAaO,QAAQ,oBAAsB,MAC3C5E,GACF,GAAwB,MAApByL,EAA0B,CAC5B,MAAMC,EAAe,IAAInE,KAAKkE,GAGxBE,GAFM,IAAIpE,KAEWmE,GADG,MAG9B,GAAIC,EADoB,GAOtB,YALA/H,QAAQgI,KACN,2DAA2DpJ,KAAKqJ,MAC9DF,gBAKR,CAGA,MAAMG,EAASlM,SAASqF,cAAc,8BAChC8G,EAASnM,SAASyK,cAAc,OAChC2B,EAAQpM,SAASyK,cAAc,OAC/B4B,EAAOrM,SAASyK,cAAc,UAC9B6B,EAAStM,SAASyK,cAAc,KAChC8B,EAAYvM,SAASyK,cAAc,KAGzC0B,EAAO7H,UAAY,mDACnB8H,EAAM9H,UAAY,kBAClBgI,EAAOhI,UACL,4FACFgI,EAAO1D,KAAO,GAAG+C,IAAe3E,MAChCsF,EAAOtB,UAAY,2BACnBsB,EAAOlB,QAAUnD,EACjBsE,EAAUjI,UAAY,2BACtB,MAAMkI,EAAUxM,SAASyK,cAAc,KACvC8B,EAAUlB,OAAOmB,GACjBA,EAAQlI,UAAY,oBACpBiI,EAAUnB,QAAU7D,EAEpB6E,EAAMpB,UAAY,6BAClB,MAAMyB,EACJrM,EAAQoB,SAAS,QACjBpB,EAAQoB,SAAS,OACjBpB,EAAQoB,SAAS,OACbkL,EACJd,GAAyBrL,EAAQH,EAASsL,EAAkB,KAC1De,GAASC,EACXL,EAAKrB,UAAY,kCACRY,GAAyBrL,EAAQH,EAASsL,EAAkB,KACrEW,EAAKrB,UAAY,mBAAmB5K,KAIpCiM,EAAKrB,UAHK5K,EAGO,WAAWA,IAFX,qBAInB8L,EAAOrB,YAAYsB,GACnBD,EAAOb,OAAOkB,GACdJ,EAAOtB,YAAYuB,GACnBA,EAAMvB,YAAYwB,GAClBD,EAAMvB,YAAY7K,SAAS2M,eAAe,MAC1CP,EAAMvB,YAAYyB,GAClBJ,EAAO5H,UAAUE,OAAO,SAC1B,CAsDQoI,CAAyBvD,GAG/B,CACF,CAkFA,SAASwD,IACP,MAAMC,EAAiB,KACrB9M,SACGmE,iBACC,CAEE,MAEA,2BAEA,yBAEA,yBAEA,mCACAf,KAAK,OAERgB,SAASC,IACRA,EAAG0I,SACD1I,EAAG2I,YAAc3I,EAAG4I,aAAe5I,EAAG6I,aAAe7I,EAAG8I,aACpD,GACC,CAAC,GACR,EAEAC,EAqBR,SAAkBrN,EAAUsN,GAC1B,IAAIC,EAAY,KAChB,MAAO,IAAIC,KACTC,aAAaF,GACbA,EAAYG,YAAW,KACrB1N,KAAYwN,EAAK,GA1BoC,IA2B/C,CAEZ,CA7BkCG,CAASZ,GAGzCxJ,OAAOpD,iBAAiB,SAAUkN,GAOb,IAAIO,iBAAiBP,GAG7BQ,QAAQ5N,SAASyF,eAAe,gBAAiB,CAC5DoI,SAAS,EACTC,WAAW,IAIbhB,GACF,CAcAxF,eAAeyG,IACb,MAAM7B,EAASlM,SAASqF,cAAc,4BAChC,mBAAE2I,GAAuB9B,EAASA,EAAOvI,QAAU,KAEzD,GAAKqK,EAIL,IACE,MAAMtE,QAAiBlB,MAAMwF,GAC7B,IAAKtE,EAAShB,GACZ,MAAM,IAAI/G,MACR,uCAAuC+H,EAASuE,UAAUvE,EAASwE,cAGvE,MAAM7E,QAAaK,EAASyE,OAC5B,GAAoB,IAAhB9E,EAAKvG,OAEP,YADAkB,QAAQW,IAAI,iCAAiCqJ,KAG/C9B,EAAOkC,UAAY,gDAAgD/E,UACnE6C,EAAO5H,UAAUE,OAAO,SAC1B,CAAE,MAAO6J,GACPrK,QAAQW,IAAI,0CAA0CqJ,KACtDhK,QAAQC,MAAMoK,EAChB,CACF,CA2CAvO,GAtCAwH,uBAEQgH,QAAQC,WAAW,CAACzF,IAAuBiF,MAKjD,MAAMS,EAAWxO,SAASqF,cAAc,8BACxC,IAAKmJ,EACH,OAIFA,EAASlK,UAAUE,OAAO,UAG1B,MAAMiK,EAASC,MAAMC,KAAKH,EAASI,UAAUC,QAC3C,CAACJ,EAAQpK,IAAOoK,EAASpK,EAAGyK,cAC5B,GAKFN,EAASO,MAAMC,YAAY,SAAU,GAAGP,OAIxChB,YAAW,KACTe,EAASO,MAAMC,YAAY,SAAU,OAAO,GAC3C,IACL,IAUAlP,GAxxBA,WAGEgE,EAAS9D,SAAS0D,gBAAgBC,QAAQI,MAG1C/D,SAASmE,iBAAiB,wBAAwBC,SAASC,IACzDA,EAAGnE,iBAAiB,QAAS2E,EAAU,GAE3C,IAgxBA/E,GA3uBA,WAEE,IAAKE,SAASqF,cAAc,gBAC1B,OAGF,IAAI4J,EAAUjP,SAASqF,cAAc,kBAIrC,IAAI6J,EAAkBhN,SACpBiN,eAAenK,QAAQ,sBACvB,IAGF,GAAK7C,MAAM+M,GAIJ,CAEL,IACIE,EADapP,SAASqF,cAAc,gBACVlB,iBAAiB,WAC/C,GAAIiL,EAAatM,OAAS,EAAG,CAE3B,IAAIuM,EAAgBD,EAAaA,EAAatM,OAAS,GACnDwM,EACFD,EAActI,wBAAwBwI,EACtCN,EAAQlI,wBAAwBwI,EAElC,GAAIF,EAActI,wBAAwBwI,EAAyB,GAArBjM,OAAOkM,YAAmB,CACtE,IAAIC,EAAS,IACbR,EAAQS,UAAYJ,EAASL,EAAQ9B,aAAesC,EACpDzL,QAAQW,IAAI,oDACd,CACF,CACF,MAnBEsK,EAAQS,UAAYR,EACpBlL,QAAQW,IAAI,4DAqBdrB,OAAOpD,iBAAiB,gBAAgB,KACtCiP,eAAezK,QAAQ,qBAAsBuK,EAAQS,UAAU,GAEnE,IAksBA5P,GAlwBA,WACEwD,OAAOpD,iBAAiB,yBAAyB,WAC9BF,SAASmE,iBAAiB,iBAElCC,SAASuL,IAChBA,EAAQC,cAActL,UAAUE,OAAO,SAAS,IAG3BxE,SAASmE,iBAAiB,wBAClCC,SAASuL,IACtBA,EAAQC,cAActL,UAAUC,IAAI,SAAS,GAEjD,GACF,IAsvBAzE,GAljByB,KAnCK,MAC5B,IAAI+P,EAAY7P,SAASmE,iBAAiB,gCACtCgC,GACF0J,EAAUzL,SACP0L,GAAOA,EAAEzK,cAAc,8BAA8B2F,UAAY,KAEtE,EA8BA+E,GA/EAzM,OAAOpD,iBACL,WACCsH,IACC,IAAIjC,EAAQJ,IAITqC,EAAMwI,UACNxI,EAAMyI,SAEN9J,GACGqB,EAAM0I,SAAY1I,EAAM2I,QACvB3I,EAAM0I,UAAW1I,EAAM2I,WAE5B,OAAO9P,KAAKmH,EAAM4I,KAMXpQ,SAAS6F,gBAAkBN,GAAS,UAAUlF,KAAKmH,EAAM4I,MAChE9K,KALAkC,EAAMU,iBACN5C,IAKF,IAEF,GA2DFtF,SAASmE,iBAAiB,0BAA0BC,SAAS0F,IAC3DA,EAAIsB,QAAU9F,CAAiB,IAIZtF,SAASyF,eAAe,qBAEhCvF,iBAAiB,QAASoG,EAA2B,IAuiBpExG,GAvQA,WAkBmB,IAAI6N,kBAjBG,CAAC0C,EAAcC,KACrCD,EAAajM,SAASmM,IAEe,IAA/BA,EAASC,WAAW1N,aAGY2N,IAAhCF,EAASC,WAAW,GAAGnH,OAGuC,GAA9DkH,EAASC,WAAW,GAAGnH,KAAKqH,OAAO,wBACrCH,EAASC,WAAWpM,SAAS8G,IAC3BlL,SAASyF,eAAe,wBAAwB4F,OAAOH,EAAK,GAEhE,GACA,IAKK0C,QAAQ5N,SAAS2Q,KADX,CAAE7C,WAAW,GAE9B,IAmPAhO,GAnNA,WAIE,MAAM8Q,EAAiB5Q,SAASyF,eAAe,uBACzCoL,EAAmB7Q,SAASyF,eAAe,yBAI3CqL,EAAgB9Q,SAASyF,eAAe,6BACxCsL,EAAkB/Q,SAASyF,eAC/B,+BAKIuL,EAAgBhR,SAASqF,cAAc,mBACvC4L,EAAkBjR,SAASqF,cAAc,qBAGzC6L,EAA6B,CAACvC,EAAMwC,KACxCzC,MAAMC,KAAKA,EAAKyC,YAAYhN,SAAS8G,GAASiG,EAAGtG,YAAYK,KAC7DwD,MAAMC,KAAKA,EAAKrK,WAAWF,SAASiN,IAClC1C,EAAKrK,UAAUE,OAAO6M,GACtBF,EAAG7M,UAAUC,IAAI8M,EAAI,GACrB,EAIJ,CACE,CAACL,EAAeF,EAAeF,GAC/B,CAACK,EAAiBF,EAAiBF,IACnCzM,SAAQ,EAAEkN,EAAc9K,EAAQyI,MAC3BqC,GAAiB9K,GAAWyI,IAMjCqC,EAAapR,iBAAiB,SAAUsH,IACtCA,EAAMU,iBACNV,EAAM+J,kBAINL,EAA2BjC,EAASzI,GAEpCA,EAAOZ,WAAW,IAIpBY,EAAOtG,iBAAiB,QAASoG,GAKjCE,EAAOtG,iBAAiB,WAAYsH,IAChB,WAAdA,EAAM4I,MACR5I,EAAMU,iBACNV,EAAM+J,kBACN/K,EAAOb,QACT,IAKFa,EAAOtG,iBAAiB,SAAS,KAC/BgR,EAA2B1K,EAAQyI,EAAQ,IAC3C,GAEN,IAiJ4B,aAAxBjP,SAASC,WACX4M,IAEAvJ,OAAOpD,iBAAiB,OAAQ2M,E","sources":["webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./node_modules/compare-versions/lib/esm/index.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/pydata-sphinx-theme.js"],"sourcesContent":["/* define several functions to replace jQuery methods\n * inspired by https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/\n */\n\n/**\n * Execute a method if DOM has finished loading\n *\n * @param {function} callback the method to execute\n */\nexport function documentReady(callback) {\n if (document.readyState != \"loading\") callback();\n else document.addEventListener(\"DOMContentLoaded\", callback);\n}\n","/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nexport const compareVersions = (v1, v2) => {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0)\n return r;\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n }\n else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n return 0;\n};\n/**\n * Validate [semver](https://semver.org/) version strings.\n *\n * @param version Version number to validate\n * @returns `true` if the version number is a valid semver version number, `false` otherwise.\n *\n * @example\n * ```\n * validate('1.0.0-rc.1'); // return true\n * validate('1.0-rc.1'); // return false\n * validate('foo'); // return false\n * ```\n */\nexport const validate = (version) => typeof version === 'string' && /^[v\\d]/.test(version) && semver.test(version);\n/**\n * Compare [semver](https://semver.org/) version strings using the specified operator.\n *\n * @param v1 First version to compare\n * @param v2 Second version to compare\n * @param operator Allowed arithmetic operator to use\n * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.\n *\n * @example\n * ```\n * compare('10.1.8', '10.0.4', '>'); // return true\n * compare('10.0.1', '10.0.1', '='); // return true\n * compare('10.1.1', '10.2.2', '<'); // return true\n * compare('10.1.1', '10.2.2', '<='); // return true\n * compare('10.1.1', '10.2.2', '>='); // return false\n * ```\n */\nexport const compare = (v1, v2, operator) => {\n // validate input operator\n assertValidOperator(operator);\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n const res = compareVersions(v1, v2);\n return operatorResMap[operator].includes(res);\n};\n/**\n * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.\n *\n * @param version Version number to match\n * @param range Range pattern for version\n * @returns `true` if the version number is within the range, `false` otherwise.\n *\n * @example\n * ```\n * satisfies('1.1.0', '^1.0.0'); // return true\n * satisfies('1.1.0', '~1.0.0'); // return false\n * ```\n */\nexport const satisfies = (version, range) => {\n // if no range operator then \"=\"\n const m = range.match(/^([<>=~^]+)/);\n const op = m ? m[1] : '=';\n // if gt/lt/eq then operator compare\n if (op !== '^' && op !== '~')\n return compare(version, range, op);\n // else range of either \"~\" or \"^\" is assumed\n const [v1, v2, v3, , vp] = validateAndParse(version);\n const [r1, r2, r3, , rp] = validateAndParse(range);\n const v = [v1, v2, v3];\n const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];\n // validate pre-release\n if (rp) {\n if (!vp)\n return false;\n if (compareSegments(v, r) !== 0)\n return false;\n if (compareSegments(vp.split('.'), rp.split('.')) === -1)\n return false;\n }\n // first non-zero number\n const nonZero = r.findIndex((v) => v !== '0') + 1;\n // pointer to where segments can be >=\n const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;\n // before pointer must be equal\n if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)\n return false;\n // after pointer must be >=\n if (compareSegments(v.slice(i), r.slice(i)) === -1)\n return false;\n return true;\n};\nconst semver = /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\nconst validateAndParse = (version) => {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = version.match(semver);\n if (!match) {\n throw new Error(`Invalid argument not valid semver ('${version}' received)`);\n }\n match.shift();\n return match;\n};\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\nconst tryParse = (v) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\nconst forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];\nconst compareStrings = (a, b) => {\n if (isWildcard(a) || isWildcard(b))\n return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp)\n return 1;\n if (ap < bp)\n return -1;\n return 0;\n};\nconst compareSegments = (a, b) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || '0', b[i] || '0');\n if (r !== 0)\n return r;\n }\n return 0;\n};\nconst operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1],\n};\nconst allowedOperators = Object.keys(operatorResMap);\nconst assertValidOperator = (op) => {\n if (typeof op !== 'string') {\n throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);\n }\n};\n//# sourceMappingURL=index.js.map","// Define the custom behavior of the page\nimport { documentReady } from \"./mixin\";\nimport { compare, validate } from \"compare-versions\";\n\nimport \"../styles/pydata-sphinx-theme.scss\";\n\n/*******************************************************************************\n * Theme interaction\n */\n\nvar prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n/**\n * set the the body theme to the one specified by the user browser\n *\n * @param {event} e\n */\nfunction autoTheme(e) {\n document.documentElement.dataset.theme = prefersDark.matches\n ? \"dark\"\n : \"light\";\n}\n\n/**\n * Set the theme using the specified mode.\n * It can be one of [\"auto\", \"dark\", \"light\"]\n *\n * @param {str} mode\n */\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n // get the theme\n var colorScheme = prefersDark.matches ? \"dark\" : \"light\";\n document.documentElement.dataset.mode = mode;\n var theme = mode == \"auto\" ? colorScheme : mode;\n document.documentElement.dataset.theme = theme;\n // TODO: remove this line after Bootstrap upgrade\n // v5.3 has a colors mode: https://getbootstrap.com/docs/5.3/customize/color-modes/\n document.querySelectorAll(\".dropdown-menu\").forEach((el) => {\n if (theme === \"dark\") {\n el.classList.add(\"dropdown-menu-dark\");\n } else {\n el.classList.remove(\"dropdown-menu-dark\");\n }\n });\n\n // save mode and theme\n localStorage.setItem(\"mode\", mode);\n localStorage.setItem(\"theme\", theme);\n console.log(`[PST]: Changed to ${mode} mode using the ${theme} theme.`);\n\n // add a listener if set on auto\n prefersDark.onchange = mode == \"auto\" ? autoTheme : \"\";\n}\n\n/**\n * Change the theme option order so that clicking on the btn is always a change\n * from \"auto\"\n */\nfunction cycleMode() {\n const defaultMode = document.documentElement.dataset.defaultMode || \"auto\";\n const currentMode = localStorage.getItem(\"mode\") || defaultMode;\n\n var loopArray = (arr, current) => {\n var nextPosition = arr.indexOf(current) + 1;\n if (nextPosition === arr.length) {\n nextPosition = 0;\n }\n return arr[nextPosition];\n };\n\n // make sure the next theme after auto is always a change\n var modeList = prefersDark.matches\n ? [\"auto\", \"light\", \"dark\"]\n : [\"auto\", \"dark\", \"light\"];\n var newMode = loopArray(modeList, currentMode);\n setTheme(newMode);\n}\n\n/**\n * add the theme listener on the btns of the navbar\n */\nfunction addModeListener() {\n // the theme was set a first time using the initial mini-script\n // running setMode will ensure the use of the dark mode if auto is selected\n setTheme(document.documentElement.dataset.mode);\n\n // Attach event handlers for toggling themes colors\n document.querySelectorAll(\".theme-switch-button\").forEach((el) => {\n el.addEventListener(\"click\", cycleMode);\n });\n}\n\n/*******************************************************************************\n * TOC interactivity\n */\n\n/**\n * TOC sidebar - add \"active\" class to parent list\n *\n * Bootstrap's scrollspy adds the active class to the link,\n * but for the automatic collapsing we need this on the parent list item.\n *\n * The event is triggered on \"window\" (and not the nav item as documented),\n * see https://github.com/twbs/bootstrap/issues/20086\n */\nfunction addTOCInteractivity() {\n window.addEventListener(\"activate.bs.scrollspy\", function () {\n const navLinks = document.querySelectorAll(\".bd-toc-nav a\");\n\n navLinks.forEach((navLink) => {\n navLink.parentElement.classList.remove(\"active\");\n });\n\n const activeNavLinks = document.querySelectorAll(\".bd-toc-nav a.active\");\n activeNavLinks.forEach((navLink) => {\n navLink.parentElement.classList.add(\"active\");\n });\n });\n}\n\n/*******************************************************************************\n * Scroll\n */\n\n/**\n * Navigation sidebar scrolling to active page\n */\nfunction scrollToActive() {\n // If the docs nav doesn't exist, do nothing (e.g., on search page)\n if (!document.querySelector(\".bd-docs-nav\")) {\n return;\n }\n\n var sidebar = document.querySelector(\"div.bd-sidebar\");\n\n // Remember the sidebar scroll position between page loads\n // Inspired on source of revealjs.com\n let storedScrollTop = parseInt(\n sessionStorage.getItem(\"sidebar-scroll-top\"),\n 10,\n );\n\n if (!isNaN(storedScrollTop)) {\n // If we've got a saved scroll position, just use that\n sidebar.scrollTop = storedScrollTop;\n console.log(\"[PST]: Scrolled sidebar using stored browser position...\");\n } else {\n // Otherwise, calculate a position to scroll to based on the lowest `active` link\n var sidebarNav = document.querySelector(\".bd-docs-nav\");\n var active_pages = sidebarNav.querySelectorAll(\".active\");\n if (active_pages.length > 0) {\n // Use the last active page as the offset since it's the page we're on\n var latest_active = active_pages[active_pages.length - 1];\n var offset =\n latest_active.getBoundingClientRect().y -\n sidebar.getBoundingClientRect().y;\n // Only scroll the navbar if the active link is lower than 50% of the page\n if (latest_active.getBoundingClientRect().y > window.innerHeight * 0.5) {\n let buffer = 0.25; // Buffer so we have some space above the scrolled item\n sidebar.scrollTop = offset - sidebar.clientHeight * buffer;\n console.log(\"[PST]: Scrolled sidebar using last active link...\");\n }\n }\n }\n\n // Store the sidebar scroll position\n window.addEventListener(\"beforeunload\", () => {\n sessionStorage.setItem(\"sidebar-scroll-top\", sidebar.scrollTop);\n });\n}\n\n/*******************************************************************************\n * Search\n */\n\n/**\n * Find any search forms on the page and return their input element\n */\nvar findSearchInput = () => {\n let forms = document.querySelectorAll(\"form.bd-search\");\n if (!forms.length) {\n // no search form found\n return;\n } else {\n var form;\n if (forms.length == 1) {\n // there is exactly one search form (persistent or hidden)\n form = forms[0];\n } else {\n // must be at least one persistent form, use the first persistent one\n form = document.querySelector(\n \":not(#pst-search-dialog) > form.bd-search\",\n );\n }\n return form.querySelector(\"input\");\n }\n};\n\n/**\n * Activate the search field on the page.\n * - If there is a search field already visible it will be activated.\n * - If not, then a search field will pop up.\n */\nvar toggleSearchField = () => {\n // Find the search input to highlight\n const input = findSearchInput();\n\n // if the input field is the hidden one (the one associated with the\n // search button) then toggle the button state (to show/hide the field)\n const searchDialog = document.getElementById(\"pst-search-dialog\");\n const hiddenInput = searchDialog.querySelector(\"input\");\n if (input === hiddenInput) {\n if (searchDialog.open) {\n searchDialog.close();\n } else {\n // Note: browsers should focus the input field inside the modal dialog\n // automatically when it is opened.\n searchDialog.showModal();\n }\n } else {\n // if the input field is not the hidden one, then toggle its focus state\n\n if (document.activeElement === input) {\n input.blur();\n } else {\n input.focus();\n input.select();\n input.scrollIntoView({ block: \"center\" });\n }\n }\n};\n\n/**\n * Add an event listener for toggleSearchField() for Ctrl/Cmd + K\n */\nvar addEventListenerForSearchKeyboard = () => {\n window.addEventListener(\n \"keydown\",\n (event) => {\n let input = findSearchInput();\n // toggle on Ctrl+k or ⌘+k\n if (\n // Ignore if shift or alt are pressed\n !event.shiftKey &&\n !event.altKey &&\n // On Mac use ⌘, all other OS use Ctrl\n (useCommandKey\n ? event.metaKey && !event.ctrlKey\n : !event.metaKey && event.ctrlKey) &&\n // Case-insensitive so the shortcut still works with caps lock\n /^k$/i.test(event.key)\n ) {\n event.preventDefault();\n toggleSearchField();\n }\n // also allow Escape key to hide (but not show) the dynamic search field\n else if (document.activeElement === input && /Escape/i.test(event.key)) {\n toggleSearchField();\n }\n },\n true,\n );\n};\n\n/**\n * If the user is on a Mac, use command (⌘) instead of control (ctrl) key\n *\n * Note: `navigator.platform` is deprecated; however MDN still recommends using\n * it for the one specific use case of detecting whether a keyboard shortcut\n * should use control or command:\n * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples\n */\nvar useCommandKey =\n navigator.platform.indexOf(\"Mac\") === 0 || navigator.platform === \"iPhone\";\n\n/**\n * Change the search hint to `meta key` if we are a Mac\n */\n\nvar changeSearchShortcutKey = () => {\n let shortcuts = document.querySelectorAll(\".search-button__kbd-shortcut\");\n if (useCommandKey) {\n shortcuts.forEach(\n (f) => (f.querySelector(\"kbd.kbd-shortcut__modifier\").innerText = \"⌘\"),\n );\n }\n};\n\nconst closeDialogOnBackdropClick = ({\n currentTarget: dialog,\n clientX,\n clientY,\n}) => {\n if (!dialog.open) {\n return;\n }\n\n // Dialog.getBoundingClientRect() does not include ::backdrop. (This is the\n // trick that allows us to determine if click was inside or outside of the\n // dialog: click handler includes backdrop, getBoundingClientRect does not.)\n const { left, right, top, bottom } = dialog.getBoundingClientRect();\n\n // 0, 0 means top left\n const clickWasOutsideDialog =\n clientX < left || right < clientX || clientY < top || bottom < clientY;\n\n if (clickWasOutsideDialog) {\n dialog.close();\n }\n};\n\n/**\n * Activate callbacks for search button popup\n */\nvar setupSearchButtons = () => {\n changeSearchShortcutKey();\n addEventListenerForSearchKeyboard();\n\n // Add the search button trigger event callback\n document.querySelectorAll(\".search-button__button\").forEach((btn) => {\n btn.onclick = toggleSearchField;\n });\n\n // If user clicks outside the search modal dialog, then close it.\n const searchDialog = document.getElementById(\"pst-search-dialog\");\n // Dialog click handler includes clicks on dialog ::backdrop.\n searchDialog.addEventListener(\"click\", closeDialogOnBackdropClick);\n};\n\n/*******************************************************************************\n * Version Switcher\n * Note that this depends on two variables existing that are defined in\n * and `html-page-context` hook:\n *\n * - DOCUMENTATION_OPTIONS.pagename\n * - DOCUMENTATION_OPTIONS.theme_switcher_url\n */\n\n/**\n * path component of URL\n */\nvar getCurrentUrlPath = () => {\n if (DOCUMENTATION_OPTIONS.BUILDER == \"dirhtml\") {\n return DOCUMENTATION_OPTIONS.pagename.endsWith(\"index\")\n ? `${DOCUMENTATION_OPTIONS.pagename.substring(0, DOCUMENTATION_OPTIONS.pagename.length - 'index'.length)}`\n : `${DOCUMENTATION_OPTIONS.pagename}/`;\n }\n return `${DOCUMENTATION_OPTIONS.pagename}.html`;\n};\n\n/**\n * Allow user to dismiss the warning banner about the docs version being dev / old.\n * We store the dismissal date and version, to give us flexibility about making the\n * dismissal last for longer than one browser session, if we decide to do that.\n *\n * @param {event} event the event that trigger the check\n */\nasync function DismissBannerAndStorePref(event) {\n const banner = document.querySelector(\"#bd-header-version-warning\");\n banner.remove();\n const version = DOCUMENTATION_OPTIONS.VERSION;\n const now = new Date();\n const banner_pref = JSON.parse(\n localStorage.getItem(\"pst_banner_pref\") || \"{}\",\n );\n console.debug(\n `[PST] Dismissing the version warning banner on ${version} starting ${now}.`,\n );\n banner_pref[version] = now;\n localStorage.setItem(\"pst_banner_pref\", JSON.stringify(banner_pref));\n}\n\n/**\n * Check if corresponding page path exists in other version of docs\n * and, if so, go there instead of the homepage of the other docs version\n *\n * @param {event} event the event that trigger the check\n */\nasync function checkPageExistsAndRedirect(event) {\n // ensure we don't follow the initial link\n event.preventDefault();\n const currentFilePath = getCurrentUrlPath();\n let tryUrl = event.currentTarget.getAttribute(\"href\");\n let otherDocsHomepage = tryUrl.replace(currentFilePath, \"\");\n try {\n let head = await fetch(tryUrl, { method: \"HEAD\" });\n if (head.ok) {\n location.href = tryUrl; // the page exists, go there\n } else {\n location.href = otherDocsHomepage;\n }\n } catch (err) {\n // something went wrong, probably CORS restriction, fallback to other docs homepage\n location.href = otherDocsHomepage;\n }\n}\n\n/**\n * Load and parse the version switcher JSON file from an absolute or relative URL.\n *\n * @param {string} url The URL to load version switcher entries from.\n */\nasync function fetchVersionSwitcherJSON(url) {\n // first check if it's a valid URL\n try {\n var result = new URL(url);\n } catch (err) {\n if (err instanceof TypeError) {\n if (!window.location.origin) {\n // window.location.origin is null for local static sites\n // (ie. window.location.protocol == 'file:')\n //\n // TODO: Fix this to return the static version switcher by working out\n // how to get the correct path to the switcher JSON file on local static builds\n return null;\n }\n // assume we got a relative path, and fix accordingly. But first, we need to\n // use `fetch()` to follow redirects so we get the correct final base URL\n const origin = await fetch(window.location.origin, { method: \"HEAD\" });\n result = new URL(url, origin.url);\n } else {\n // something unexpected happened\n throw err;\n }\n }\n // load and return the JSON\n const response = await fetch(result);\n const data = await response.json();\n return data;\n}\n\n// Populate the version switcher from the JSON data\nfunction populateVersionSwitcher(data, versionSwitcherBtns) {\n const currentFilePath = getCurrentUrlPath();\n versionSwitcherBtns.forEach((btn) => {\n // Set empty strings by default so that these attributes exist and can be used in CSS selectors\n btn.dataset[\"activeVersionName\"] = \"\";\n btn.dataset[\"activeVersion\"] = \"\";\n });\n // in case there are multiple entries with the same version string, this helps us\n // decide which entry's `name` to put on the button itself. Without this, it would\n // always be the *last* version-matching entry; now it will be either the\n // version-matching entry that is also marked as `\"preferred\": true`, or if that\n // doesn't exist: the *first* version-matching entry.\n data = data.map((entry) => {\n // does this entry match the version that we're currently building/viewing?\n entry.match =\n entry.version == DOCUMENTATION_OPTIONS.theme_switcher_version_match;\n entry.preferred = entry.preferred || false;\n // if no custom name specified (e.g., \"latest\"), use version string\n if (!(\"name\" in entry)) {\n entry.name = entry.version;\n }\n return entry;\n });\n const hasMatchingPreferredEntry = data\n .map((entry) => entry.preferred && entry.match)\n .some(Boolean);\n var foundMatch = false;\n // create links to the corresponding page in the other docs versions\n data.forEach((entry) => {\n // create the node\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\n \"class\",\n \"dropdown-item list-group-item list-group-item-action py-1\",\n );\n anchor.setAttribute(\"href\", `${entry.url}${currentFilePath}`);\n anchor.setAttribute(\"role\", \"option\");\n const span = document.createElement(\"span\");\n span.textContent = `${entry.name}`;\n anchor.appendChild(span);\n // Add dataset values for the version and name in case people want\n // to apply CSS styling based on this information.\n anchor.dataset[\"versionName\"] = entry.name;\n anchor.dataset[\"version\"] = entry.version;\n // replace dropdown button text with the preferred display name of the\n // currently-viewed version, rather than using sphinx's {{ version }} variable.\n // also highlight the dropdown entry for the currently-viewed version's entry\n let matchesAndIsPreferred = hasMatchingPreferredEntry && entry.preferred;\n let matchesAndIsFirst =\n !hasMatchingPreferredEntry && !foundMatch && entry.match;\n if (matchesAndIsPreferred || matchesAndIsFirst) {\n anchor.classList.add(\"active\");\n versionSwitcherBtns.forEach((btn) => {\n btn.innerText = entry.name;\n btn.dataset[\"activeVersionName\"] = entry.name;\n btn.dataset[\"activeVersion\"] = entry.version;\n });\n foundMatch = true;\n }\n // There may be multiple version-switcher elements, e.g. one\n // in a slide-over panel displayed on smaller screens.\n document.querySelectorAll(\".version-switcher__menu\").forEach((menu) => {\n // we need to clone the node for each menu, but onclick attributes are not\n // preserved by `.cloneNode()` so we add onclick here after cloning.\n let node = anchor.cloneNode(true);\n node.onclick = checkPageExistsAndRedirect;\n // on click, AJAX calls will check if the linked page exists before\n // trying to redirect, and if not, will redirect to the homepage\n // for that version of the docs.\n menu.append(node);\n });\n });\n}\n\n/*******************************************************************************\n * Warning banner when viewing non-stable version of the docs.\n */\n\n/**\n * Show a warning banner when viewing a non-stable version of the docs.\n *\n * adapted 2023-06 from https://mne.tools/versionwarning.js, which was\n * originally adapted 2020-05 from https://scikit-learn.org/versionwarning.js\n *\n * @param {Array} data The version data used to populate the switcher menu.\n */\nfunction showVersionWarningBanner(data) {\n var version = DOCUMENTATION_OPTIONS.VERSION;\n // figure out what latest stable version is\n var preferredEntries = data.filter((entry) => entry.preferred);\n if (preferredEntries.length !== 1) {\n const howMany = preferredEntries.length == 0 ? \"No\" : \"Multiple\";\n console.log(\n `[PST] ${howMany} versions marked \"preferred\" found in versions JSON, ignoring.`,\n );\n return;\n }\n const preferredVersion = preferredEntries[0].version;\n const preferredURL = preferredEntries[0].url;\n // if already on preferred version, nothing to do\n const versionsAreComparable = validate(version) && validate(preferredVersion);\n if (versionsAreComparable && compare(version, preferredVersion, \"=\")) {\n console.log(\n \"[PST]: This is the preferred version of the docs, not showing the warning banner.\",\n );\n return;\n }\n // check if banner has been dismissed recently\n const dismiss_date_str = JSON.parse(\n localStorage.getItem(\"pst_banner_pref\") || \"{}\",\n )[version];\n if (dismiss_date_str != null) {\n const dismiss_date = new Date(dismiss_date_str);\n const now = new Date();\n const milliseconds_in_a_day = 24 * 60 * 60 * 1000;\n const days_passed = (now - dismiss_date) / milliseconds_in_a_day;\n const timeout_in_days = 14;\n if (days_passed < timeout_in_days) {\n console.info(\n `[PST] Suppressing version warning banner; was dismissed ${Math.floor(\n days_passed,\n )} day(s) ago`,\n );\n return;\n }\n }\n\n // now construct the warning banner\n const banner = document.querySelector(\"#bd-header-version-warning\");\n const middle = document.createElement(\"div\");\n const inner = document.createElement(\"div\");\n const bold = document.createElement(\"strong\");\n const button = document.createElement(\"a\");\n const close_btn = document.createElement(\"a\");\n // these classes exist since pydata-sphinx-theme v0.10.0\n // the init class is used for animation\n middle.classList = \"bd-header-announcement__content ms-auto me-auto\";\n inner.classList = \"sidebar-message\";\n button.classList =\n \"btn text-wrap font-weight-bold ms-3 my-1 align-baseline pst-button-link-to-stable-version\";\n button.href = `${preferredURL}${getCurrentUrlPath()}`;\n button.innerText = \"Switch to stable version\";\n button.onclick = checkPageExistsAndRedirect;\n close_btn.classList = \"ms-3 my-1 align-baseline\";\n const close_x = document.createElement(\"i\");\n close_btn.append(close_x);\n close_x.classList = \"fa-solid fa-xmark\";\n close_btn.onclick = DismissBannerAndStorePref;\n // add the version-dependent text\n inner.innerText = \"This is documentation for \";\n const isDev =\n version.includes(\"dev\") ||\n version.includes(\"rc\") ||\n version.includes(\"pre\");\n const newerThanPreferred =\n versionsAreComparable && compare(version, preferredVersion, \">\");\n if (isDev || newerThanPreferred) {\n bold.innerText = \"an unstable development version\";\n } else if (versionsAreComparable && compare(version, preferredVersion, \"<\")) {\n bold.innerText = `an old version (${version})`;\n } else if (!version) {\n bold.innerText = \"an unknown version\"; // e.g., an empty string\n } else {\n bold.innerText = `version ${version}`;\n }\n banner.appendChild(middle);\n banner.append(close_btn);\n middle.appendChild(inner);\n inner.appendChild(bold);\n inner.appendChild(document.createTextNode(\".\"));\n inner.appendChild(button);\n banner.classList.remove(\"d-none\");\n}\n\n/*******************************************************************************\n * MutationObserver to move the ReadTheDocs button\n */\n\n/**\n * intercept the RTD flyout and place it in the rtd-footer-container if existing\n * if not it stays where on top of the page\n */\nfunction initRTDObserver() {\n const mutatedCallback = (mutationList, observer) => {\n mutationList.forEach((mutation) => {\n // Check whether the mutation is for RTD, which will have a specific structure\n if (mutation.addedNodes.length === 0) {\n return;\n }\n if (mutation.addedNodes[0].data === undefined) {\n return;\n }\n if (mutation.addedNodes[0].data.search(\"Inserted RTD Footer\") != -1) {\n mutation.addedNodes.forEach((node) => {\n document.getElementById(\"rtd-footer-container\").append(node);\n });\n }\n });\n };\n\n const observer = new MutationObserver(mutatedCallback);\n const config = { childList: true };\n observer.observe(document.body, config);\n}\n\nasync function fetchAndUseVersions() {\n // fetch the JSON version data (only once), then use it to populate the version\n // switcher and maybe show the version warning bar\n var versionSwitcherBtns = document.querySelectorAll(\n \".version-switcher__button\",\n );\n const hasSwitcherMenu = versionSwitcherBtns.length > 0;\n const hasVersionsJSON = DOCUMENTATION_OPTIONS.hasOwnProperty(\n \"theme_switcher_json_url\",\n );\n const wantsWarningBanner = DOCUMENTATION_OPTIONS.show_version_warning_banner;\n\n if (hasVersionsJSON && (hasSwitcherMenu || wantsWarningBanner)) {\n const data = await fetchVersionSwitcherJSON(\n DOCUMENTATION_OPTIONS.theme_switcher_json_url,\n );\n // TODO: remove the `if(data)` once the `return null` is fixed within fetchVersionSwitcherJSON.\n // We don't really want the switcher and warning bar to silently not work.\n if (data) {\n populateVersionSwitcher(data, versionSwitcherBtns);\n if (wantsWarningBanner) {\n showVersionWarningBanner(data);\n }\n }\n }\n}\n\n/*******************************************************************************\n * Sidebar modals (for mobile / narrow screens)\n */\nfunction setupMobileSidebarKeyboardHandlers() {\n // These are the left and right sidebars for wider screens. We cut and paste\n // the content from these widescreen sidebars into the mobile dialogs, when\n // the user clicks the hamburger icon button\n const primarySidebar = document.getElementById(\"pst-primary-sidebar\");\n const secondarySidebar = document.getElementById(\"pst-secondary-sidebar\");\n\n // These are the corresponding left/right elements, which are empty\n // until the user clicks the hamburger icon\n const primaryDialog = document.getElementById(\"pst-primary-sidebar-modal\");\n const secondaryDialog = document.getElementById(\n \"pst-secondary-sidebar-modal\",\n );\n\n // These are the hamburger-style buttons in the header nav bar. They only\n // appear at narrow screen width.\n const primaryToggle = document.querySelector(\".primary-toggle\");\n const secondaryToggle = document.querySelector(\".secondary-toggle\");\n\n // Cut nodes and classes from `from`, paste into/onto `to`\n const cutAndPasteNodesAndClasses = (from, to) => {\n Array.from(from.childNodes).forEach((node) => to.appendChild(node));\n Array.from(from.classList).forEach((cls) => {\n from.classList.remove(cls);\n to.classList.add(cls);\n });\n };\n\n // Hook up the ways to open and close the dialog\n [\n [primaryToggle, primaryDialog, primarySidebar],\n [secondaryToggle, secondaryDialog, secondarySidebar],\n ].forEach(([toggleButton, dialog, sidebar]) => {\n if (!toggleButton || !dialog || !sidebar) {\n return;\n }\n\n // Clicking the button can only open the sidebar, not close it.\n // Clicking the button is also the *only* way to open the sidebar.\n toggleButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n // When we open the dialog, we cut and paste the nodes and classes from\n // the widescreen sidebar into the dialog\n cutAndPasteNodesAndClasses(sidebar, dialog);\n\n dialog.showModal();\n });\n\n // Listen for clicks on the backdrop in order to close the dialog\n dialog.addEventListener(\"click\", closeDialogOnBackdropClick);\n\n // We have to manually attach the escape key because there's some code in\n // Sphinx's Sphinx_highlight.js that prevents the default behavior of the\n // escape key\n dialog.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n dialog.close();\n }\n });\n\n // When the dialog is closed, move the nodes (and classes) back to their\n // original place\n dialog.addEventListener(\"close\", () => {\n cutAndPasteNodesAndClasses(dialog, sidebar);\n });\n });\n}\n\n/**\n * When the page loads, or the window resizes, or descendant nodes are added or\n * removed from the main element, check all code blocks and Jupyter notebook\n * outputs, and for each one that has scrollable overflow, set tabIndex = 0.\n */\nfunction addTabStopsToScrollableElements() {\n const updateTabStops = () => {\n document\n .querySelectorAll(\n [\n // code blocks\n \"pre\",\n // NBSphinx notebook output\n \".nboutput > .output_area\",\n // Myst-NB\n \".cell_output > .output\",\n // ipywidgets\n \".jp-RenderedHTMLCommon\",\n // [rST table nodes](https://www.docutils.org/docs/ref/doctree.html#table)\n \".pst-scrollable-table-container\",\n ].join(\", \"),\n )\n .forEach((el) => {\n el.tabIndex =\n el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight\n ? 0\n : -1;\n });\n };\n const debouncedUpdateTabStops = debounce(updateTabStops, 300);\n\n // On window resize\n window.addEventListener(\"resize\", debouncedUpdateTabStops);\n\n // The following MutationObserver is for ipywidgets, which take some time to\n // finish loading and rendering on the page (so even after the \"load\" event is\n // fired, they still have not finished rendering). Would be nice to replace\n // the MutationObserver if there is a way to hook into the ipywidgets code to\n // know when it is done.\n const mainObserver = new MutationObserver(debouncedUpdateTabStops);\n\n // On descendant nodes added/removed from main element\n mainObserver.observe(document.getElementById(\"main-content\"), {\n subtree: true,\n childList: true,\n });\n\n // On page load (when this function gets called)\n updateTabStops();\n}\nfunction debounce(callback, wait) {\n let timeoutId = null;\n return (...args) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n callback(...args);\n }, wait);\n };\n}\n\n/*******************************************************************************\n * Announcement banner - fetch and load remote HTML\n */\nasync function setupAnnouncementBanner() {\n const banner = document.querySelector(\".bd-header-announcement\");\n const { pstAnnouncementUrl } = banner ? banner.dataset : null;\n\n if (!pstAnnouncementUrl) {\n return;\n }\n\n try {\n const response = await fetch(pstAnnouncementUrl);\n if (!response.ok) {\n throw new Error(\n `[PST]: HTTP response status not ok: ${response.status} ${response.statusText}`,\n );\n }\n const data = await response.text();\n if (data.length === 0) {\n console.log(`[PST]: Empty announcement at: ${pstAnnouncementUrl}`);\n return;\n }\n banner.innerHTML = `
${data}
`;\n banner.classList.remove(\"d-none\");\n } catch (_error) {\n console.log(`[PST]: Failed to load announcement at: ${pstAnnouncementUrl}`);\n console.error(_error);\n }\n}\n\n/*******************************************************************************\n * Reveal (and animate) the banners (version warning, announcement) together\n */\nasync function fetchRevealBannersTogether() {\n // Wait until finished fetching and loading banners\n await Promise.allSettled([fetchAndUseVersions(), setupAnnouncementBanner()]);\n\n // The revealer element should have CSS rules that set height to 0, overflow\n // to hidden, and an animation transition on the height (unless the user has\n // turned off animations)\n const revealer = document.querySelector(\".pst-async-banner-revealer\");\n if (!revealer) {\n return;\n }\n\n // Remove the d-none (display-none) class to calculate the children heights.\n revealer.classList.remove(\"d-none\");\n\n // Add together the heights of the element's children\n const height = Array.from(revealer.children).reduce(\n (height, el) => height + el.offsetHeight,\n 0,\n );\n\n // Use the calculated height to give the revealer a non-zero height (if\n // animations allowed, the height change will animate)\n revealer.style.setProperty(\"height\", `${height}px`);\n\n // Wait for a bit more than 300ms (the transition duration), then set height\n // to auto so the banner can resize if the window is resized.\n setTimeout(() => {\n revealer.style.setProperty(\"height\", \"auto\");\n }, 320);\n}\n\n/*******************************************************************************\n * Call functions after document loading.\n */\n\n// This one first to kick off the network request for the version warning\n// and announcement banner data as early as possible.\ndocumentReady(fetchRevealBannersTogether);\n\ndocumentReady(addModeListener);\ndocumentReady(scrollToActive);\ndocumentReady(addTOCInteractivity);\ndocumentReady(setupSearchButtons);\ndocumentReady(initRTDObserver);\ndocumentReady(setupMobileSidebarKeyboardHandlers);\n\n// Determining whether an element has scrollable content depends on stylesheets,\n// so we're checking for the \"load\" event rather than \"DOMContentLoaded\"\nif (document.readyState === \"complete\") {\n addTabStopsToScrollableElements();\n} else {\n window.addEventListener(\"load\", addTabStopsToScrollableElements);\n}\n"],"names":["documentReady","callback","document","readyState","addEventListener","validate","version","test","semver","compare","v1","v2","operator","assertValidOperator","res","n1","validateAndParse","n2","p1","pop","p2","r","compareSegments","split","compareVersions","operatorResMap","includes","TypeError","match","Error","shift","isWildcard","s","tryParse","v","n","parseInt","isNaN","compareStrings","a","b","ap","bp","String","forceType","i","Math","max","length","allowedOperators","Object","keys","op","indexOf","join","prefersDark","window","matchMedia","autoTheme","e","documentElement","dataset","theme","matches","setTheme","mode","console","error","colorScheme","querySelectorAll","forEach","el","classList","add","remove","localStorage","setItem","log","onchange","cycleMode","defaultMode","currentMode","getItem","arr","nextPosition","findSearchInput","forms","querySelector","toggleSearchField","input","searchDialog","getElementById","open","close","showModal","activeElement","blur","focus","select","scrollIntoView","block","useCommandKey","navigator","platform","closeDialogOnBackdropClick","currentTarget","dialog","clientX","clientY","left","right","top","bottom","getBoundingClientRect","getCurrentUrlPath","DOCUMENTATION_OPTIONS","BUILDER","pagename","endsWith","substring","async","DismissBannerAndStorePref","event","VERSION","now","Date","banner_pref","JSON","parse","debug","stringify","checkPageExistsAndRedirect","preventDefault","currentFilePath","tryUrl","getAttribute","otherDocsHomepage","replace","fetch","method","ok","location","href","err","fetchAndUseVersions","versionSwitcherBtns","hasSwitcherMenu","hasVersionsJSON","hasOwnProperty","wantsWarningBanner","show_version_warning_banner","data","url","result","URL","origin","response","json","fetchVersionSwitcherJSON","theme_switcher_json_url","btn","hasMatchingPreferredEntry","map","entry","theme_switcher_version_match","preferred","name","some","Boolean","foundMatch","anchor","createElement","setAttribute","span","textContent","appendChild","matchesAndIsPreferred","matchesAndIsFirst","innerText","menu","node","cloneNode","onclick","append","populateVersionSwitcher","preferredEntries","filter","howMany","preferredVersion","preferredURL","versionsAreComparable","dismiss_date_str","dismiss_date","days_passed","info","floor","banner","middle","inner","bold","button","close_btn","close_x","isDev","newerThanPreferred","createTextNode","showVersionWarningBanner","addTabStopsToScrollableElements","updateTabStops","tabIndex","scrollWidth","clientWidth","scrollHeight","clientHeight","debouncedUpdateTabStops","wait","timeoutId","args","clearTimeout","setTimeout","debounce","MutationObserver","observe","subtree","childList","setupAnnouncementBanner","pstAnnouncementUrl","status","statusText","text","innerHTML","_error","Promise","allSettled","revealer","height","Array","from","children","reduce","offsetHeight","style","setProperty","sidebar","storedScrollTop","sessionStorage","active_pages","latest_active","offset","y","innerHeight","buffer","scrollTop","navLink","parentElement","shortcuts","f","changeSearchShortcutKey","shiftKey","altKey","metaKey","ctrlKey","key","mutationList","observer","mutation","addedNodes","undefined","search","body","primarySidebar","secondarySidebar","primaryDialog","secondaryDialog","primaryToggle","secondaryToggle","cutAndPasteNodesAndClasses","to","childNodes","cls","toggleButton","stopPropagation"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"scripts/pydata-sphinx-theme.js","mappings":"mBASO,SAASA,EAAcC,GACD,WAAvBC,SAASC,WAAyBF,IACjCC,SAASE,iBAAiB,mBAAoBH,EACrD,CCLO,MAiCMI,EAAYC,GAA+B,iBAAZA,GAAwB,SAASC,KAAKD,IAAYE,EAAOD,KAAKD,GAkB7FG,EAAU,CAACC,EAAIC,EAAIC,KAE5BC,EAAoBD,GAGpB,MAAME,EAxDqB,EAACJ,EAAIC,KAEhC,MAAMI,EAAKC,EAAiBN,GACtBO,EAAKD,EAAiBL,GAEtBO,EAAKH,EAAGI,MACRC,EAAKH,EAAGE,MAERE,EAAIC,EAAgBP,EAAIE,GAC9B,OAAU,IAANI,EACOA,EAEPH,GAAME,EACCE,EAAgBJ,EAAGK,MAAM,KAAMH,EAAGG,MAAM,MAE1CL,GAAME,EACJF,GAAM,EAAI,EAEd,CAAC,EAsCIM,CAAgBd,EAAIC,GAChC,OAAOc,EAAeb,GAAUc,SAASZ,EAAI,EAgD3CN,EAAS,6IACTQ,EAAoBV,IACtB,GAAuB,iBAAZA,EACP,MAAM,IAAIqB,UAAU,oCAExB,MAAMC,EAAQtB,EAAQsB,MAAMpB,GAC5B,IAAKoB,EACD,MAAM,IAAIC,MAAM,uCAAuCvB,gBAG3D,OADAsB,EAAME,QACCF,CAAK,EAEVG,EAAcC,GAAY,MAANA,GAAmB,MAANA,GAAmB,MAANA,EAC9CC,EAAYC,IACd,MAAMC,EAAIC,SAASF,EAAG,IACtB,OAAOG,MAAMF,GAAKD,EAAIC,CAAC,EAGrBG,EAAiB,CAACC,EAAGC,KACvB,GAAIT,EAAWQ,IAAMR,EAAWS,GAC5B,OAAO,EACX,MAAOC,EAAIC,GAJG,EAACH,EAAGC,WAAaD,UAAaC,EAAI,CAACG,OAAOJ,GAAII,OAAOH,IAAM,CAACD,EAAGC,GAI5DI,CAAUX,EAASM,GAAIN,EAASO,IACjD,OAAIC,EAAKC,EACE,EACPD,EAAKC,GACG,EACL,CAAC,EAENpB,EAAkB,CAACiB,EAAGC,KACxB,IAAK,IAAIK,EAAI,EAAGA,EAAIC,KAAKC,IAAIR,EAAES,OAAQR,EAAEQ,QAASH,IAAK,CACnD,MAAMxB,EAAIiB,EAAeC,EAAEM,IAAM,IAAKL,EAAEK,IAAM,KAC9C,GAAU,IAANxB,EACA,OAAOA,CACf,CACA,OAAO,CAAC,EAENI,EAAiB,CACnB,IAAK,CAAC,GACN,KAAM,CAAC,EAAG,GACV,IAAK,CAAC,GACN,KAAM,EAAE,EAAG,GACX,IAAK,EAAE,IAELwB,EAAmBC,OAAOC,KAAK1B,GAC/BZ,EAAuBuC,IACzB,GAAkB,iBAAPA,EACP,MAAM,IAAIzB,UAAU,yDAAyDyB,GAEjF,IAAsC,IAAlCH,EAAiBI,QAAQD,GACzB,MAAM,IAAIvB,MAAM,qCAAqCoB,EAAiBK,KAAK,OAC/E,ECxJJ,IAAIC,EAAcC,OAAOC,WAAW,gCAOpC,SAASC,EAAUC,GACjBzD,SAAS0D,gBAAgBC,QAAQC,MAAQP,EAAYQ,QACjD,OACA,OACN,CAQA,SAASC,EAASC,GACH,UAATA,GAA6B,SAATA,GAA4B,SAATA,IACzCC,QAAQC,MAAM,2BAA2BF,yBACzCA,EAAO,QAIT,IAAIG,EAAcb,EAAYQ,QAAU,OAAS,QACjD7D,SAAS0D,gBAAgBC,QAAQI,KAAOA,EACxC,IAAIH,EAAgB,QAARG,EAAiBG,EAAcH,EAC3C/D,SAAS0D,gBAAgBC,QAAQC,MAAQA,EAGzC5D,SAASmE,iBAAiB,kBAAkBC,SAASC,IACrC,SAAVT,EACFS,EAAGC,UAAUC,IAAI,sBAEjBF,EAAGC,UAAUE,OAAO,qBACtB,IAIFC,aAAaC,QAAQ,OAAQX,GAC7BU,aAAaC,QAAQ,QAASd,GAC9BI,QAAQW,IAAI,qBAAqBZ,oBAAuBH,YAGxDP,EAAYuB,SAAmB,QAARb,EAAiBP,EAAY,EACtD,CAMA,SAASqB,IACP,MAAMC,EAAc9E,SAAS0D,gBAAgBC,QAAQmB,aAAe,OAC9DC,EAAcN,aAAaO,QAAQ,SAAWF,EAEpD,IAAiBG,EACXC,EAYNpB,IAZMoB,GADWD,EASF5B,EAAYQ,QACvB,CAAC,OAAQ,QAAS,QAClB,CAAC,OAAQ,OAAQ,UAVIV,QAWS4B,GAXU,KACrBE,EAAInC,SACvBoC,EAAe,GAEVD,EAAIC,IASf,CAsGA,IAAIC,EAAkB,KACpB,IAAIC,EAAQpF,SAASmE,iBAAiB,kBACtC,OAAKiB,EAAMtC,QAKW,GAAhBsC,EAAMtC,OAEDsC,EAAM,GAGNpF,SAASqF,cACd,8CAGQA,cAAc,cAZ1B,CAaF,EAQEC,EAAoB,KAEtB,MAAMC,EAAQJ,IAIRK,EAAexF,SAASyF,eAAe,qBAEzCF,IADgBC,EAAaH,cAAc,SAEzCG,EAAaE,KACfF,EAAaG,QAIbH,EAAaI,YAKX5F,SAAS6F,gBAAkBN,EAC7BA,EAAMO,QAENP,EAAMQ,QACNR,EAAMS,SACNT,EAAMU,eAAe,CAAEC,MAAO,WAElC,EA2CEC,EACoC,IAAtCC,UAAUC,SAASlD,QAAQ,QAAuC,WAAvBiD,UAAUC,SAevD,MAAMC,EAA6B,EACjCC,cAAeC,EACfC,UACAC,cAEA,IAAKF,EAAOd,KACV,OAMF,MAAM,KAAEiB,EAAI,MAAEC,EAAK,IAAEC,EAAG,OAAEC,GAAWN,EAAOO,yBAI1CN,EAAUE,GAAQC,EAAQH,GAAWC,EAAUG,GAAOC,EAASJ,IAG/DF,EAAOb,OACT,EAMF,IA2BIqB,EAAoB,IACe,WAAjCC,sBAAsBC,QACjBD,sBAAsBE,SAASC,SAAS,SAC3C,GAAGH,sBAAsBE,SAASE,UAAU,EAAGJ,sBAAsBE,SAASrE,OAAS,KACvF,GAAGmE,sBAAsBE,YAExB,GAAGF,sBAAsBE,gBAUlCG,eAAeC,EAA0BC,GACxBxH,SAASqF,cAAc,8BAC/Bb,SACP,MAAMpE,EAAU6G,sBAAsBQ,QAChCC,EAAM,IAAIC,KACVC,EAAcC,KAAKC,MACvBrD,aAAaO,QAAQ,oBAAsB,MAE7ChB,QAAQ+D,MACN,kDAAkD3H,cAAoBsH,MAExEE,EAAYxH,GAAWsH,EACvBjD,aAAaC,QAAQ,kBAAmBmD,KAAKG,UAAUJ,GACzD,CAQAN,eAAeW,EAA2BT,GAExCA,EAAMU,iBACN,MAAMC,EAAkBnB,IACxB,IAAIoB,EAASZ,EAAMjB,cAAc8B,aAAa,QAC1CC,EAAoBF,EAAOG,QAAQJ,EAAiB,IACxD,WACmBK,MAAMJ,EAAQ,CAAEK,OAAQ,UAChCC,GACPC,SAASC,KAAOR,EAEhBO,SAASC,KAAON,CAEpB,CAAE,MAAOO,GAEPF,SAASC,KAAON,CAClB,CACF,CA2NAhB,eAAewB,IAGb,IAAIC,EAAsB/I,SAASmE,iBACjC,6BAEF,MAAM6E,EAAkBD,EAAoBjG,OAAS,EAC/CmG,EAAkBhC,sBAAsBiC,eAC5C,2BAEIC,EAAqBlC,sBAAsBmC,4BAEjD,GAAIH,IAAoBD,GAAmBG,GAAqB,CAC9D,MAAME,QAjOV/B,eAAwCgC,GACtC,MAAMC,EAAcvC,IAEpB,IACE,IAAIwC,EAAS,IAAIC,IAAIH,EACvB,CAAE,MAAOT,GACP,KAAIA,aAAepH,WAsBjB,MAAMoH,EAtBsB,CAEI,SAA5BvF,OAAOqF,SAASe,UAIlB1F,QAAQ2F,KACN,gOAKJ,MAAMC,EAAStG,OAAOqF,SAASC,KAAKzF,QAAQoG,GAGtCM,GACO,GAAXD,EACItG,OAAOqF,SAASC,KAChBtF,OAAOqF,SAASC,KAAKvB,UAAU,EAAGuC,GACxCJ,EAAS,IAAIC,IAAIH,EAAKO,EACxB,CAIF,CAEA,MAAMC,QAAiBtB,MAAMgB,GAE7B,aADmBM,EAASC,MAE9B,CA8LuBC,CACjB/C,sBAAsBgD,yBAIpBZ,IAhMR,SAAiCA,EAAMN,GACrC,MAAMZ,EAAkBnB,IACxB+B,EAAoB3E,SAAS8F,IAE3BA,EAAIvG,QAA2B,kBAAI,GACnCuG,EAAIvG,QAAuB,cAAI,EAAE,IAkBnC,MAAMwG,GAXNd,EAAOA,EAAKe,KAAKC,IAEfA,EAAM3I,MACJ2I,EAAMjK,SAAW6G,sBAAsBqD,6BACzCD,EAAME,UAAYF,EAAME,YAAa,EAE/B,SAAUF,IACdA,EAAMG,KAAOH,EAAMjK,SAEdiK,MAGND,KAAKC,GAAUA,EAAME,WAAaF,EAAM3I,QACxC+I,KAAKC,SACR,IAAIC,GAAa,EAEjBtB,EAAKjF,SAASiG,IAEZ,MAAMO,EAAS5K,SAAS6K,cAAc,KACtCD,EAAOE,aACL,QACA,6DAEFF,EAAOE,aAAa,OAAQ,GAAGT,EAAMf,MAAMnB,KAC3CyC,EAAOE,aAAa,OAAQ,UAC5B,MAAMC,EAAO/K,SAAS6K,cAAc,QACpCE,EAAKC,YAAc,GAAGX,EAAMG,OAC5BI,EAAOK,YAAYF,GAGnBH,EAAOjH,QAAqB,YAAI0G,EAAMG,KACtCI,EAAOjH,QAAiB,QAAI0G,EAAMjK,QAIlC,IAAI8K,EAAwBf,GAA6BE,EAAME,UAC3DY,GACDhB,IAA8BQ,GAAcN,EAAM3I,OACjDwJ,GAAyBC,KAC3BP,EAAOtG,UAAUC,IAAI,UACrBwE,EAAoB3E,SAAS8F,IAC3BA,EAAIkB,UAAYf,EAAMG,KACtBN,EAAIvG,QAA2B,kBAAI0G,EAAMG,KACzCN,EAAIvG,QAAuB,cAAI0G,EAAMjK,OAAO,IAE9CuK,GAAa,GAIf3K,SAASmE,iBAAiB,2BAA2BC,SAASiH,IAG5D,IAAIC,EAAOV,EAAOW,WAAU,GAC5BD,EAAKE,QAAUvD,EAIfoD,EAAKI,OAAOH,EAAK,GACjB,GAEN,CAyHMI,CAAwBrC,EAAMN,GAC1BI,GA5GV,SAAkCE,GAChC,IAAIjJ,EAAU6G,sBAAsBQ,QAEhCkE,EAAmBtC,EAAKuC,QAAQvB,GAAUA,EAAME,YACpD,GAAgC,IAA5BoB,EAAiB7I,OAAc,CACjC,MAAM+I,EAAqC,GAA3BF,EAAiB7I,OAAc,KAAO,WAItD,YAHAkB,QAAQW,IACN,SAASkH,kEAGb,CACA,MAAMC,EAAmBH,EAAiB,GAAGvL,QACvC2L,EAAeJ,EAAiB,GAAGrC,IAEnC0C,EAAwB7L,EAASC,IAAYD,EAAS2L,GAC5D,GAAIE,GAAyBzL,EAAQH,EAAS0L,EAAkB,KAI9D,YAHA9H,QAAQW,IACN,qFAKJ,MAAMsH,EAAmBpE,KAAKC,MAC5BrD,aAAaO,QAAQ,oBAAsB,MAC3C5E,GACF,GAAwB,MAApB6L,EAA0B,CAC5B,MAAMC,EAAe,IAAIvE,KAAKsE,GAGxBE,GAFM,IAAIxE,KAEWuE,GADG,MAG9B,GAAIC,EADoB,GAOtB,YALAnI,QAAQ2F,KACN,2DAA2D/G,KAAKwJ,MAC9DD,gBAKR,CAGA,MAAME,EAASrM,SAASqF,cAAc,8BAChCiH,EAAStM,SAAS6K,cAAc,OAChC0B,EAAQvM,SAAS6K,cAAc,OAC/B2B,EAAOxM,SAAS6K,cAAc,UAC9B4B,EAASzM,SAAS6K,cAAc,KAChC6B,EAAY1M,SAAS6K,cAAc,KAGzCyB,EAAOhI,UAAY,mDACnBiI,EAAMjI,UAAY,kBAClBmI,EAAOnI,UACL,4FACFmI,EAAO7D,KAAO,GAAGmD,IAAe/E,MAChCyF,EAAOrB,UAAY,2BACnBqB,EAAOjB,QAAUvD,EACjByE,EAAUpI,UAAY,2BACtB,MAAMqI,EAAU3M,SAAS6K,cAAc,KACvC6B,EAAUjB,OAAOkB,GACjBA,EAAQrI,UAAY,oBACpBoI,EAAUlB,QAAUjE,EAEpBgF,EAAMnB,UAAY,6BAClB,MAAMwB,EACJxM,EAAQoB,SAAS,QACjBpB,EAAQoB,SAAS,OACjBpB,EAAQoB,SAAS,OACbqL,EACJb,GAAyBzL,EAAQH,EAAS0L,EAAkB,KAC1Dc,GAASC,EACXL,EAAKpB,UAAY,kCACRY,GAAyBzL,EAAQH,EAAS0L,EAAkB,KACrEU,EAAKpB,UAAY,mBAAmBhL,KAIpCoM,EAAKpB,UAHKhL,EAGO,WAAWA,IAFX,qBAInBiM,EAAOpB,YAAYqB,GACnBD,EAAOZ,OAAOiB,GACdJ,EAAOrB,YAAYsB,GACnBA,EAAMtB,YAAYuB,GAClBD,EAAMtB,YAAYjL,SAAS8M,eAAe,MAC1CP,EAAMtB,YAAYwB,GAClBJ,EAAO/H,UAAUE,OAAO,SAC1B,CAuBQuI,CAAyB1D,GAG/B,CACF,CAkFA,SAAS2D,IACP,MAAMC,EAAiB,KACrBjN,SACGmE,iBACC,CAEE,MAEA,2BAEA,yBAEA,yBAEA,mCACAf,KAAK,OAERgB,SAASC,IACRA,EAAG6I,SACD7I,EAAG8I,YAAc9I,EAAG+I,aAAe/I,EAAGgJ,aAAehJ,EAAGiJ,aACpD,GACC,CAAC,GACR,EAEAC,EAqBR,SAAkBxN,EAAUyN,GAC1B,IAAIC,EAAY,KAChB,MAAO,IAAIC,KACTC,aAAaF,GACbA,EAAYG,YAAW,KACrB7N,KAAY2N,EAAK,GA1BoC,IA2B/C,CAEZ,CA7BkCG,CAASZ,GAGzC3J,OAAOpD,iBAAiB,SAAUqN,GAOb,IAAIO,iBAAiBP,GAG7BQ,QAAQ/N,SAASyF,eAAe,gBAAiB,CAC5DuI,SAAS,EACTC,WAAW,IAIbhB,GACF,CAcA3F,eAAe4G,IACb,MAAM7B,EAASrM,SAASqF,cAAc,4BAChC,mBAAE8I,GAAuB9B,EAASA,EAAO1I,QAAU,KAEzD,GAAKwK,EAIL,IACE,MAAMrE,QAAiBtB,MAAM2F,GAC7B,IAAKrE,EAASpB,GACZ,MAAM,IAAI/G,MACR,uCAAuCmI,EAASsE,UAAUtE,EAASuE,cAGvE,MAAMhF,QAAaS,EAASwE,OAC5B,GAAoB,IAAhBjF,EAAKvG,OAEP,YADAkB,QAAQW,IAAI,iCAAiCwJ,KAG/C9B,EAAOkC,UAAY,gDAAgDlF,UACnEgD,EAAO/H,UAAUE,OAAO,SAC1B,CAAE,MAAOgK,GACPxK,QAAQW,IAAI,0CAA0CwJ,KACtDnK,QAAQC,MAAMuK,EAChB,CACF,CA2CA1O,GAtCAwH,uBAEQmH,QAAQC,WAAW,CAAC5F,IAAuBoF,MAKjD,MAAMS,EAAW3O,SAASqF,cAAc,8BACxC,IAAKsJ,EACH,OAIFA,EAASrK,UAAUE,OAAO,UAG1B,MAAMoK,EAASC,MAAMC,KAAKH,EAASI,UAAUC,QAC3C,CAACJ,EAAQvK,IAAOuK,EAASvK,EAAG4K,cAC5B,GAKFN,EAASO,MAAMC,YAAY,SAAU,GAAGP,OAIxChB,YAAW,KACTe,EAASO,MAAMC,YAAY,SAAU,OAAO,GAC3C,IACL,IAUArP,GAjwBA,WAGEgE,EAAS9D,SAAS0D,gBAAgBC,QAAQI,MAG1C/D,SAASmE,iBAAiB,wBAAwBC,SAASC,IACzDA,EAAGnE,iBAAiB,QAAS2E,EAAU,GAE3C,IAyvBA/E,GAptBA,WAEE,IAAKE,SAASqF,cAAc,gBAC1B,OAGF,IAAI+J,EAAUpP,SAASqF,cAAc,kBAIrC,IAAIgK,EAAkBnN,SACpBoN,eAAetK,QAAQ,sBACvB,IAGF,GAAK7C,MAAMkN,GAIJ,CAEL,IACIE,EADavP,SAASqF,cAAc,gBACVlB,iBAAiB,WAC/C,GAAIoL,EAAazM,OAAS,EAAG,CAE3B,IAAI0M,EAAgBD,EAAaA,EAAazM,OAAS,GACnD2M,EACFD,EAAczI,wBAAwB2I,EACtCN,EAAQrI,wBAAwB2I,EAElC,GAAIF,EAAczI,wBAAwB2I,EAAyB,GAArBpM,OAAOqM,YAAmB,CACtE,IAAIC,EAAS,IACbR,EAAQS,UAAYJ,EAASL,EAAQ9B,aAAesC,EACpD5L,QAAQW,IAAI,oDACd,CACF,CACF,MAnBEyK,EAAQS,UAAYR,EACpBrL,QAAQW,IAAI,4DAqBdrB,OAAOpD,iBAAiB,gBAAgB,KACtCoP,eAAe5K,QAAQ,qBAAsB0K,EAAQS,UAAU,GAEnE,IA2qBA/P,GA3uBA,WACEwD,OAAOpD,iBAAiB,yBAAyB,WAC9BF,SAASmE,iBAAiB,iBAElCC,SAAS0L,IAChBA,EAAQC,cAAczL,UAAUE,OAAO,SAAS,IAG3BxE,SAASmE,iBAAiB,wBAClCC,SAAS0L,IACtBA,EAAQC,cAAczL,UAAUC,IAAI,SAAS,GAEjD,GACF,IA+tBAzE,GA3hByB,KAnCK,MAC5B,IAAIkQ,EAAYhQ,SAASmE,iBAAiB,gCACtCgC,GACF6J,EAAU5L,SACP6L,GAAOA,EAAE5K,cAAc,8BAA8B+F,UAAY,KAEtE,EA8BA8E,GA/EA5M,OAAOpD,iBACL,WACCsH,IACC,IAAIjC,EAAQJ,IAITqC,EAAM2I,UACN3I,EAAM4I,SAENjK,GACGqB,EAAM6I,SAAY7I,EAAM8I,QACvB9I,EAAM6I,UAAW7I,EAAM8I,WAE5B,OAAOjQ,KAAKmH,EAAM+I,KAMXvQ,SAAS6F,gBAAkBN,GAAS,UAAUlF,KAAKmH,EAAM+I,MAChEjL,KALAkC,EAAMU,iBACN5C,IAKF,IAEF,GA2DFtF,SAASmE,iBAAiB,0BAA0BC,SAAS8F,IAC3DA,EAAIsB,QAAUlG,CAAiB,IAIZtF,SAASyF,eAAe,qBAEhCvF,iBAAiB,QAASoG,EAA2B,IAghBpExG,GAlNA,WAIE,MAAM0Q,EAAiBxQ,SAASyF,eAAe,uBACzCgL,EAAmBzQ,SAASyF,eAAe,yBAI3CiL,EAAgB1Q,SAASyF,eAAe,6BACxCkL,EAAkB3Q,SAASyF,eAC/B,+BAKImL,EAAgB5Q,SAASqF,cAAc,mBACvCwL,EAAkB7Q,SAASqF,cAAc,qBAGzCyL,EAA6B,CAAChC,EAAMiC,KACxClC,MAAMC,KAAKA,EAAKkC,YAAY5M,SAASkH,GAASyF,EAAG9F,YAAYK,KAC7DuD,MAAMC,KAAKA,EAAKxK,WAAWF,SAAS6M,IAClCnC,EAAKxK,UAAUE,OAAOyM,GACtBF,EAAGzM,UAAUC,IAAI0M,EAAI,GACrB,EAIJ,CACE,CAACL,EAAeF,EAAeF,GAC/B,CAACK,EAAiBF,EAAiBF,IACnCrM,SAAQ,EAAE8M,EAAc1K,EAAQ4I,MAC3B8B,GAAiB1K,GAAW4I,IAMjC8B,EAAahR,iBAAiB,SAAUsH,IACtCA,EAAMU,iBACNV,EAAM2J,kBAINL,EAA2B1B,EAAS5I,GAEpCA,EAAOZ,WAAW,IAIpBY,EAAOtG,iBAAiB,QAASoG,GAKjCE,EAAOtG,iBAAiB,WAAYsH,IAChB,WAAdA,EAAM+I,MACR/I,EAAMU,iBACNV,EAAM2J,kBACN3K,EAAOb,QACT,IAKFa,EAAOtG,iBAAiB,SAAS,KAC/B4Q,EAA2BtK,EAAQ4I,EAAQ,IAC3C,GAEN,IAgJ4B,aAAxBpP,SAASC,WACX+M,IAEA1J,OAAOpD,iBAAiB,OAAQ8M,E","sources":["webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./node_modules/compare-versions/lib/esm/index.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/pydata-sphinx-theme.js"],"sourcesContent":["/* define several functions to replace jQuery methods\n * inspired by https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/\n */\n\n/**\n * Execute a method if DOM has finished loading\n *\n * @param {function} callback the method to execute\n */\nexport function documentReady(callback) {\n if (document.readyState != \"loading\") callback();\n else document.addEventListener(\"DOMContentLoaded\", callback);\n}\n","/**\n * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.\n * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.\n * @param v1 - First version to compare\n * @param v2 - Second version to compare\n * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n */\nexport const compareVersions = (v1, v2) => {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0)\n return r;\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n }\n else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n return 0;\n};\n/**\n * Validate [semver](https://semver.org/) version strings.\n *\n * @param version Version number to validate\n * @returns `true` if the version number is a valid semver version number, `false` otherwise.\n *\n * @example\n * ```\n * validate('1.0.0-rc.1'); // return true\n * validate('1.0-rc.1'); // return false\n * validate('foo'); // return false\n * ```\n */\nexport const validate = (version) => typeof version === 'string' && /^[v\\d]/.test(version) && semver.test(version);\n/**\n * Compare [semver](https://semver.org/) version strings using the specified operator.\n *\n * @param v1 First version to compare\n * @param v2 Second version to compare\n * @param operator Allowed arithmetic operator to use\n * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.\n *\n * @example\n * ```\n * compare('10.1.8', '10.0.4', '>'); // return true\n * compare('10.0.1', '10.0.1', '='); // return true\n * compare('10.1.1', '10.2.2', '<'); // return true\n * compare('10.1.1', '10.2.2', '<='); // return true\n * compare('10.1.1', '10.2.2', '>='); // return false\n * ```\n */\nexport const compare = (v1, v2, operator) => {\n // validate input operator\n assertValidOperator(operator);\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n const res = compareVersions(v1, v2);\n return operatorResMap[operator].includes(res);\n};\n/**\n * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.\n *\n * @param version Version number to match\n * @param range Range pattern for version\n * @returns `true` if the version number is within the range, `false` otherwise.\n *\n * @example\n * ```\n * satisfies('1.1.0', '^1.0.0'); // return true\n * satisfies('1.1.0', '~1.0.0'); // return false\n * ```\n */\nexport const satisfies = (version, range) => {\n // if no range operator then \"=\"\n const m = range.match(/^([<>=~^]+)/);\n const op = m ? m[1] : '=';\n // if gt/lt/eq then operator compare\n if (op !== '^' && op !== '~')\n return compare(version, range, op);\n // else range of either \"~\" or \"^\" is assumed\n const [v1, v2, v3, , vp] = validateAndParse(version);\n const [r1, r2, r3, , rp] = validateAndParse(range);\n const v = [v1, v2, v3];\n const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];\n // validate pre-release\n if (rp) {\n if (!vp)\n return false;\n if (compareSegments(v, r) !== 0)\n return false;\n if (compareSegments(vp.split('.'), rp.split('.')) === -1)\n return false;\n }\n // first non-zero number\n const nonZero = r.findIndex((v) => v !== '0') + 1;\n // pointer to where segments can be >=\n const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;\n // before pointer must be equal\n if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)\n return false;\n // after pointer must be >=\n if (compareSegments(v.slice(i), r.slice(i)) === -1)\n return false;\n return true;\n};\nconst semver = /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\nconst validateAndParse = (version) => {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = version.match(semver);\n if (!match) {\n throw new Error(`Invalid argument not valid semver ('${version}' received)`);\n }\n match.shift();\n return match;\n};\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\nconst tryParse = (v) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\nconst forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];\nconst compareStrings = (a, b) => {\n if (isWildcard(a) || isWildcard(b))\n return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp)\n return 1;\n if (ap < bp)\n return -1;\n return 0;\n};\nconst compareSegments = (a, b) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || '0', b[i] || '0');\n if (r !== 0)\n return r;\n }\n return 0;\n};\nconst operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1],\n};\nconst allowedOperators = Object.keys(operatorResMap);\nconst assertValidOperator = (op) => {\n if (typeof op !== 'string') {\n throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);\n }\n};\n//# sourceMappingURL=index.js.map","// Define the custom behavior of the page\nimport { documentReady } from \"./mixin\";\nimport { compare, validate } from \"compare-versions\";\n\nimport \"../styles/pydata-sphinx-theme.scss\";\n\n/*******************************************************************************\n * Theme interaction\n */\n\nvar prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n/**\n * set the the body theme to the one specified by the user browser\n *\n * @param {event} e\n */\nfunction autoTheme(e) {\n document.documentElement.dataset.theme = prefersDark.matches\n ? \"dark\"\n : \"light\";\n}\n\n/**\n * Set the theme using the specified mode.\n * It can be one of [\"auto\", \"dark\", \"light\"]\n *\n * @param {str} mode\n */\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n // get the theme\n var colorScheme = prefersDark.matches ? \"dark\" : \"light\";\n document.documentElement.dataset.mode = mode;\n var theme = mode == \"auto\" ? colorScheme : mode;\n document.documentElement.dataset.theme = theme;\n // TODO: remove this line after Bootstrap upgrade\n // v5.3 has a colors mode: https://getbootstrap.com/docs/5.3/customize/color-modes/\n document.querySelectorAll(\".dropdown-menu\").forEach((el) => {\n if (theme === \"dark\") {\n el.classList.add(\"dropdown-menu-dark\");\n } else {\n el.classList.remove(\"dropdown-menu-dark\");\n }\n });\n\n // save mode and theme\n localStorage.setItem(\"mode\", mode);\n localStorage.setItem(\"theme\", theme);\n console.log(`[PST]: Changed to ${mode} mode using the ${theme} theme.`);\n\n // add a listener if set on auto\n prefersDark.onchange = mode == \"auto\" ? autoTheme : \"\";\n}\n\n/**\n * Change the theme option order so that clicking on the btn is always a change\n * from \"auto\"\n */\nfunction cycleMode() {\n const defaultMode = document.documentElement.dataset.defaultMode || \"auto\";\n const currentMode = localStorage.getItem(\"mode\") || defaultMode;\n\n var loopArray = (arr, current) => {\n var nextPosition = arr.indexOf(current) + 1;\n if (nextPosition === arr.length) {\n nextPosition = 0;\n }\n return arr[nextPosition];\n };\n\n // make sure the next theme after auto is always a change\n var modeList = prefersDark.matches\n ? [\"auto\", \"light\", \"dark\"]\n : [\"auto\", \"dark\", \"light\"];\n var newMode = loopArray(modeList, currentMode);\n setTheme(newMode);\n}\n\n/**\n * add the theme listener on the btns of the navbar\n */\nfunction addModeListener() {\n // the theme was set a first time using the initial mini-script\n // running setMode will ensure the use of the dark mode if auto is selected\n setTheme(document.documentElement.dataset.mode);\n\n // Attach event handlers for toggling themes colors\n document.querySelectorAll(\".theme-switch-button\").forEach((el) => {\n el.addEventListener(\"click\", cycleMode);\n });\n}\n\n/*******************************************************************************\n * TOC interactivity\n */\n\n/**\n * TOC sidebar - add \"active\" class to parent list\n *\n * Bootstrap's scrollspy adds the active class to the
link,\n * but for the automatic collapsing we need this on the parent list item.\n *\n * The event is triggered on \"window\" (and not the nav item as documented),\n * see https://github.com/twbs/bootstrap/issues/20086\n */\nfunction addTOCInteractivity() {\n window.addEventListener(\"activate.bs.scrollspy\", function () {\n const navLinks = document.querySelectorAll(\".bd-toc-nav a\");\n\n navLinks.forEach((navLink) => {\n navLink.parentElement.classList.remove(\"active\");\n });\n\n const activeNavLinks = document.querySelectorAll(\".bd-toc-nav a.active\");\n activeNavLinks.forEach((navLink) => {\n navLink.parentElement.classList.add(\"active\");\n });\n });\n}\n\n/*******************************************************************************\n * Scroll\n */\n\n/**\n * Navigation sidebar scrolling to active page\n */\nfunction scrollToActive() {\n // If the docs nav doesn't exist, do nothing (e.g., on search page)\n if (!document.querySelector(\".bd-docs-nav\")) {\n return;\n }\n\n var sidebar = document.querySelector(\"div.bd-sidebar\");\n\n // Remember the sidebar scroll position between page loads\n // Inspired on source of revealjs.com\n let storedScrollTop = parseInt(\n sessionStorage.getItem(\"sidebar-scroll-top\"),\n 10,\n );\n\n if (!isNaN(storedScrollTop)) {\n // If we've got a saved scroll position, just use that\n sidebar.scrollTop = storedScrollTop;\n console.log(\"[PST]: Scrolled sidebar using stored browser position...\");\n } else {\n // Otherwise, calculate a position to scroll to based on the lowest `active` link\n var sidebarNav = document.querySelector(\".bd-docs-nav\");\n var active_pages = sidebarNav.querySelectorAll(\".active\");\n if (active_pages.length > 0) {\n // Use the last active page as the offset since it's the page we're on\n var latest_active = active_pages[active_pages.length - 1];\n var offset =\n latest_active.getBoundingClientRect().y -\n sidebar.getBoundingClientRect().y;\n // Only scroll the navbar if the active link is lower than 50% of the page\n if (latest_active.getBoundingClientRect().y > window.innerHeight * 0.5) {\n let buffer = 0.25; // Buffer so we have some space above the scrolled item\n sidebar.scrollTop = offset - sidebar.clientHeight * buffer;\n console.log(\"[PST]: Scrolled sidebar using last active link...\");\n }\n }\n }\n\n // Store the sidebar scroll position\n window.addEventListener(\"beforeunload\", () => {\n sessionStorage.setItem(\"sidebar-scroll-top\", sidebar.scrollTop);\n });\n}\n\n/*******************************************************************************\n * Search\n */\n\n/**\n * Find any search forms on the page and return their input element\n */\nvar findSearchInput = () => {\n let forms = document.querySelectorAll(\"form.bd-search\");\n if (!forms.length) {\n // no search form found\n return;\n } else {\n var form;\n if (forms.length == 1) {\n // there is exactly one search form (persistent or hidden)\n form = forms[0];\n } else {\n // must be at least one persistent form, use the first persistent one\n form = document.querySelector(\n \":not(#pst-search-dialog) > form.bd-search\",\n );\n }\n return form.querySelector(\"input\");\n }\n};\n\n/**\n * Activate the search field on the page.\n * - If there is a search field already visible it will be activated.\n * - If not, then a search field will pop up.\n */\nvar toggleSearchField = () => {\n // Find the search input to highlight\n const input = findSearchInput();\n\n // if the input field is the hidden one (the one associated with the\n // search button) then toggle the button state (to show/hide the field)\n const searchDialog = document.getElementById(\"pst-search-dialog\");\n const hiddenInput = searchDialog.querySelector(\"input\");\n if (input === hiddenInput) {\n if (searchDialog.open) {\n searchDialog.close();\n } else {\n // Note: browsers should focus the input field inside the modal dialog\n // automatically when it is opened.\n searchDialog.showModal();\n }\n } else {\n // if the input field is not the hidden one, then toggle its focus state\n\n if (document.activeElement === input) {\n input.blur();\n } else {\n input.focus();\n input.select();\n input.scrollIntoView({ block: \"center\" });\n }\n }\n};\n\n/**\n * Add an event listener for toggleSearchField() for Ctrl/Cmd + K\n */\nvar addEventListenerForSearchKeyboard = () => {\n window.addEventListener(\n \"keydown\",\n (event) => {\n let input = findSearchInput();\n // toggle on Ctrl+k or ⌘+k\n if (\n // Ignore if shift or alt are pressed\n !event.shiftKey &&\n !event.altKey &&\n // On Mac use ⌘, all other OS use Ctrl\n (useCommandKey\n ? event.metaKey && !event.ctrlKey\n : !event.metaKey && event.ctrlKey) &&\n // Case-insensitive so the shortcut still works with caps lock\n /^k$/i.test(event.key)\n ) {\n event.preventDefault();\n toggleSearchField();\n }\n // also allow Escape key to hide (but not show) the dynamic search field\n else if (document.activeElement === input && /Escape/i.test(event.key)) {\n toggleSearchField();\n }\n },\n true,\n );\n};\n\n/**\n * If the user is on a Mac, use command (⌘) instead of control (ctrl) key\n *\n * Note: `navigator.platform` is deprecated; however MDN still recommends using\n * it for the one specific use case of detecting whether a keyboard shortcut\n * should use control or command:\n * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform#examples\n */\nvar useCommandKey =\n navigator.platform.indexOf(\"Mac\") === 0 || navigator.platform === \"iPhone\";\n\n/**\n * Change the search hint to `meta key` if we are a Mac\n */\n\nvar changeSearchShortcutKey = () => {\n let shortcuts = document.querySelectorAll(\".search-button__kbd-shortcut\");\n if (useCommandKey) {\n shortcuts.forEach(\n (f) => (f.querySelector(\"kbd.kbd-shortcut__modifier\").innerText = \"⌘\"),\n );\n }\n};\n\nconst closeDialogOnBackdropClick = ({\n currentTarget: dialog,\n clientX,\n clientY,\n}) => {\n if (!dialog.open) {\n return;\n }\n\n // Dialog.getBoundingClientRect() does not include ::backdrop. (This is the\n // trick that allows us to determine if click was inside or outside of the\n // dialog: click handler includes backdrop, getBoundingClientRect does not.)\n const { left, right, top, bottom } = dialog.getBoundingClientRect();\n\n // 0, 0 means top left\n const clickWasOutsideDialog =\n clientX < left || right < clientX || clientY < top || bottom < clientY;\n\n if (clickWasOutsideDialog) {\n dialog.close();\n }\n};\n\n/**\n * Activate callbacks for search button popup\n */\nvar setupSearchButtons = () => {\n changeSearchShortcutKey();\n addEventListenerForSearchKeyboard();\n\n // Add the search button trigger event callback\n document.querySelectorAll(\".search-button__button\").forEach((btn) => {\n btn.onclick = toggleSearchField;\n });\n\n // If user clicks outside the search modal dialog, then close it.\n const searchDialog = document.getElementById(\"pst-search-dialog\");\n // Dialog click handler includes clicks on dialog ::backdrop.\n searchDialog.addEventListener(\"click\", closeDialogOnBackdropClick);\n};\n\n/*******************************************************************************\n * Version Switcher\n * Note that this depends on two variables existing that are defined in\n * and `html-page-context` hook:\n *\n * - DOCUMENTATION_OPTIONS.pagename\n * - DOCUMENTATION_OPTIONS.theme_switcher_url\n */\n\n/**\n * path component of URL\n */\nvar getCurrentUrlPath = () => {\n if (DOCUMENTATION_OPTIONS.BUILDER == \"dirhtml\") {\n return DOCUMENTATION_OPTIONS.pagename.endsWith(\"index\")\n ? `${DOCUMENTATION_OPTIONS.pagename.substring(0, DOCUMENTATION_OPTIONS.pagename.length - \"index\".length)}`\n : `${DOCUMENTATION_OPTIONS.pagename}/`;\n }\n return `${DOCUMENTATION_OPTIONS.pagename}.html`;\n};\n\n/**\n * Allow user to dismiss the warning banner about the docs version being dev / old.\n * We store the dismissal date and version, to give us flexibility about making the\n * dismissal last for longer than one browser session, if we decide to do that.\n *\n * @param {event} event the event that trigger the check\n */\nasync function DismissBannerAndStorePref(event) {\n const banner = document.querySelector(\"#bd-header-version-warning\");\n banner.remove();\n const version = DOCUMENTATION_OPTIONS.VERSION;\n const now = new Date();\n const banner_pref = JSON.parse(\n localStorage.getItem(\"pst_banner_pref\") || \"{}\",\n );\n console.debug(\n `[PST] Dismissing the version warning banner on ${version} starting ${now}.`,\n );\n banner_pref[version] = now;\n localStorage.setItem(\"pst_banner_pref\", JSON.stringify(banner_pref));\n}\n\n/**\n * Check if corresponding page path exists in other version of docs\n * and, if so, go there instead of the homepage of the other docs version\n *\n * @param {event} event the event that trigger the check\n */\nasync function checkPageExistsAndRedirect(event) {\n // ensure we don't follow the initial link\n event.preventDefault();\n const currentFilePath = getCurrentUrlPath();\n let tryUrl = event.currentTarget.getAttribute(\"href\");\n let otherDocsHomepage = tryUrl.replace(currentFilePath, \"\");\n try {\n let head = await fetch(tryUrl, { method: \"HEAD\" });\n if (head.ok) {\n location.href = tryUrl; // the page exists, go there\n } else {\n location.href = otherDocsHomepage;\n }\n } catch (err) {\n // something went wrong, probably CORS restriction, fallback to other docs homepage\n location.href = otherDocsHomepage;\n }\n}\n\n/**\n * Load and parse the version switcher JSON file from an absolute or relative URL.\n *\n * @param {string} url The URL to load version switcher entries from.\n */\nasync function fetchVersionSwitcherJSON(url) {\n const currentPath = getCurrentUrlPath();\n // first check if it's a valid URL\n try {\n var result = new URL(url);\n } catch (err) {\n if (err instanceof TypeError) {\n // Assume we got a relative path, and fix accordingly.\n if (window.location.protocol == \"file:\") {\n // Here instead of returning `null` we work out what the file path would be\n // anyway (same code path as for served docs), as a convenience to folks who\n // routinely disable CORS when they boot up their browser.\n console.info(\n \"[PST] looks like you're viewing this site from a local filesystem, so \" +\n \"the version switcher won't work unless you've disabled CORS. See \" +\n \"https://pydata-sphinx-theme.readthedocs.io/en/stable/user_guide/version-dropdown.html\",\n );\n }\n const cutoff = window.location.href.indexOf(currentPath);\n // cutoff == -1 can happen e.g. on the homepage of locally served docs, where you\n // get something like http://127.0.0.1:8000/ (no trailing `index.html`)\n const origin =\n cutoff == -1\n ? window.location.href\n : window.location.href.substring(0, cutoff);\n result = new URL(url, origin);\n } else {\n // something unexpected happened\n throw err;\n }\n }\n // load and return the JSON\n const response = await fetch(result);\n const data = await response.json();\n return data;\n}\n\n// Populate the version switcher from the JSON data\nfunction populateVersionSwitcher(data, versionSwitcherBtns) {\n const currentFilePath = getCurrentUrlPath();\n versionSwitcherBtns.forEach((btn) => {\n // Set empty strings by default so that these attributes exist and can be used in CSS selectors\n btn.dataset[\"activeVersionName\"] = \"\";\n btn.dataset[\"activeVersion\"] = \"\";\n });\n // in case there are multiple entries with the same version string, this helps us\n // decide which entry's `name` to put on the button itself. Without this, it would\n // always be the *last* version-matching entry; now it will be either the\n // version-matching entry that is also marked as `\"preferred\": true`, or if that\n // doesn't exist: the *first* version-matching entry.\n data = data.map((entry) => {\n // does this entry match the version that we're currently building/viewing?\n entry.match =\n entry.version == DOCUMENTATION_OPTIONS.theme_switcher_version_match;\n entry.preferred = entry.preferred || false;\n // if no custom name specified (e.g., \"latest\"), use version string\n if (!(\"name\" in entry)) {\n entry.name = entry.version;\n }\n return entry;\n });\n const hasMatchingPreferredEntry = data\n .map((entry) => entry.preferred && entry.match)\n .some(Boolean);\n var foundMatch = false;\n // create links to the corresponding page in the other docs versions\n data.forEach((entry) => {\n // create the node\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\n \"class\",\n \"dropdown-item list-group-item list-group-item-action py-1\",\n );\n anchor.setAttribute(\"href\", `${entry.url}${currentFilePath}`);\n anchor.setAttribute(\"role\", \"option\");\n const span = document.createElement(\"span\");\n span.textContent = `${entry.name}`;\n anchor.appendChild(span);\n // Add dataset values for the version and name in case people want\n // to apply CSS styling based on this information.\n anchor.dataset[\"versionName\"] = entry.name;\n anchor.dataset[\"version\"] = entry.version;\n // replace dropdown button text with the preferred display name of the\n // currently-viewed version, rather than using sphinx's {{ version }} variable.\n // also highlight the dropdown entry for the currently-viewed version's entry\n let matchesAndIsPreferred = hasMatchingPreferredEntry && entry.preferred;\n let matchesAndIsFirst =\n !hasMatchingPreferredEntry && !foundMatch && entry.match;\n if (matchesAndIsPreferred || matchesAndIsFirst) {\n anchor.classList.add(\"active\");\n versionSwitcherBtns.forEach((btn) => {\n btn.innerText = entry.name;\n btn.dataset[\"activeVersionName\"] = entry.name;\n btn.dataset[\"activeVersion\"] = entry.version;\n });\n foundMatch = true;\n }\n // There may be multiple version-switcher elements, e.g. one\n // in a slide-over panel displayed on smaller screens.\n document.querySelectorAll(\".version-switcher__menu\").forEach((menu) => {\n // we need to clone the node for each menu, but onclick attributes are not\n // preserved by `.cloneNode()` so we add onclick here after cloning.\n let node = anchor.cloneNode(true);\n node.onclick = checkPageExistsAndRedirect;\n // on click, AJAX calls will check if the linked page exists before\n // trying to redirect, and if not, will redirect to the homepage\n // for that version of the docs.\n menu.append(node);\n });\n });\n}\n\n/*******************************************************************************\n * Warning banner when viewing non-stable version of the docs.\n */\n\n/**\n * Show a warning banner when viewing a non-stable version of the docs.\n *\n * adapted 2023-06 from https://mne.tools/versionwarning.js, which was\n * originally adapted 2020-05 from https://scikit-learn.org/versionwarning.js\n *\n * @param {Array} data The version data used to populate the switcher menu.\n */\nfunction showVersionWarningBanner(data) {\n var version = DOCUMENTATION_OPTIONS.VERSION;\n // figure out what latest stable version is\n var preferredEntries = data.filter((entry) => entry.preferred);\n if (preferredEntries.length !== 1) {\n const howMany = preferredEntries.length == 0 ? \"No\" : \"Multiple\";\n console.log(\n `[PST] ${howMany} versions marked \"preferred\" found in versions JSON, ignoring.`,\n );\n return;\n }\n const preferredVersion = preferredEntries[0].version;\n const preferredURL = preferredEntries[0].url;\n // if already on preferred version, nothing to do\n const versionsAreComparable = validate(version) && validate(preferredVersion);\n if (versionsAreComparable && compare(version, preferredVersion, \"=\")) {\n console.log(\n \"[PST]: This is the preferred version of the docs, not showing the warning banner.\",\n );\n return;\n }\n // check if banner has been dismissed recently\n const dismiss_date_str = JSON.parse(\n localStorage.getItem(\"pst_banner_pref\") || \"{}\",\n )[version];\n if (dismiss_date_str != null) {\n const dismiss_date = new Date(dismiss_date_str);\n const now = new Date();\n const milliseconds_in_a_day = 24 * 60 * 60 * 1000;\n const days_passed = (now - dismiss_date) / milliseconds_in_a_day;\n const timeout_in_days = 14;\n if (days_passed < timeout_in_days) {\n console.info(\n `[PST] Suppressing version warning banner; was dismissed ${Math.floor(\n days_passed,\n )} day(s) ago`,\n );\n return;\n }\n }\n\n // now construct the warning banner\n const banner = document.querySelector(\"#bd-header-version-warning\");\n const middle = document.createElement(\"div\");\n const inner = document.createElement(\"div\");\n const bold = document.createElement(\"strong\");\n const button = document.createElement(\"a\");\n const close_btn = document.createElement(\"a\");\n // these classes exist since pydata-sphinx-theme v0.10.0\n // the init class is used for animation\n middle.classList = \"bd-header-announcement__content ms-auto me-auto\";\n inner.classList = \"sidebar-message\";\n button.classList =\n \"btn text-wrap font-weight-bold ms-3 my-1 align-baseline pst-button-link-to-stable-version\";\n button.href = `${preferredURL}${getCurrentUrlPath()}`;\n button.innerText = \"Switch to stable version\";\n button.onclick = checkPageExistsAndRedirect;\n close_btn.classList = \"ms-3 my-1 align-baseline\";\n const close_x = document.createElement(\"i\");\n close_btn.append(close_x);\n close_x.classList = \"fa-solid fa-xmark\";\n close_btn.onclick = DismissBannerAndStorePref;\n // add the version-dependent text\n inner.innerText = \"This is documentation for \";\n const isDev =\n version.includes(\"dev\") ||\n version.includes(\"rc\") ||\n version.includes(\"pre\");\n const newerThanPreferred =\n versionsAreComparable && compare(version, preferredVersion, \">\");\n if (isDev || newerThanPreferred) {\n bold.innerText = \"an unstable development version\";\n } else if (versionsAreComparable && compare(version, preferredVersion, \"<\")) {\n bold.innerText = `an old version (${version})`;\n } else if (!version) {\n bold.innerText = \"an unknown version\"; // e.g., an empty string\n } else {\n bold.innerText = `version ${version}`;\n }\n banner.appendChild(middle);\n banner.append(close_btn);\n middle.appendChild(inner);\n inner.appendChild(bold);\n inner.appendChild(document.createTextNode(\".\"));\n inner.appendChild(button);\n banner.classList.remove(\"d-none\");\n}\n\nasync function fetchAndUseVersions() {\n // fetch the JSON version data (only once), then use it to populate the version\n // switcher and maybe show the version warning bar\n var versionSwitcherBtns = document.querySelectorAll(\n \".version-switcher__button\",\n );\n const hasSwitcherMenu = versionSwitcherBtns.length > 0;\n const hasVersionsJSON = DOCUMENTATION_OPTIONS.hasOwnProperty(\n \"theme_switcher_json_url\",\n );\n const wantsWarningBanner = DOCUMENTATION_OPTIONS.show_version_warning_banner;\n\n if (hasVersionsJSON && (hasSwitcherMenu || wantsWarningBanner)) {\n const data = await fetchVersionSwitcherJSON(\n DOCUMENTATION_OPTIONS.theme_switcher_json_url,\n );\n // TODO: remove the `if(data)` once the `return null` is fixed within fetchVersionSwitcherJSON.\n // We don't really want the switcher and warning bar to silently not work.\n if (data) {\n populateVersionSwitcher(data, versionSwitcherBtns);\n if (wantsWarningBanner) {\n showVersionWarningBanner(data);\n }\n }\n }\n}\n\n/*******************************************************************************\n * Sidebar modals (for mobile / narrow screens)\n */\nfunction setupMobileSidebarKeyboardHandlers() {\n // These are the left and right sidebars for wider screens. We cut and paste\n // the content from these widescreen sidebars into the mobile dialogs, when\n // the user clicks the hamburger icon button\n const primarySidebar = document.getElementById(\"pst-primary-sidebar\");\n const secondarySidebar = document.getElementById(\"pst-secondary-sidebar\");\n\n // These are the corresponding left/right elements, which are empty\n // until the user clicks the hamburger icon\n const primaryDialog = document.getElementById(\"pst-primary-sidebar-modal\");\n const secondaryDialog = document.getElementById(\n \"pst-secondary-sidebar-modal\",\n );\n\n // These are the hamburger-style buttons in the header nav bar. They only\n // appear at narrow screen width.\n const primaryToggle = document.querySelector(\".primary-toggle\");\n const secondaryToggle = document.querySelector(\".secondary-toggle\");\n\n // Cut nodes and classes from `from`, paste into/onto `to`\n const cutAndPasteNodesAndClasses = (from, to) => {\n Array.from(from.childNodes).forEach((node) => to.appendChild(node));\n Array.from(from.classList).forEach((cls) => {\n from.classList.remove(cls);\n to.classList.add(cls);\n });\n };\n\n // Hook up the ways to open and close the dialog\n [\n [primaryToggle, primaryDialog, primarySidebar],\n [secondaryToggle, secondaryDialog, secondarySidebar],\n ].forEach(([toggleButton, dialog, sidebar]) => {\n if (!toggleButton || !dialog || !sidebar) {\n return;\n }\n\n // Clicking the button can only open the sidebar, not close it.\n // Clicking the button is also the *only* way to open the sidebar.\n toggleButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n // When we open the dialog, we cut and paste the nodes and classes from\n // the widescreen sidebar into the dialog\n cutAndPasteNodesAndClasses(sidebar, dialog);\n\n dialog.showModal();\n });\n\n // Listen for clicks on the backdrop in order to close the dialog\n dialog.addEventListener(\"click\", closeDialogOnBackdropClick);\n\n // We have to manually attach the escape key because there's some code in\n // Sphinx's Sphinx_highlight.js that prevents the default behavior of the\n // escape key\n dialog.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n dialog.close();\n }\n });\n\n // When the dialog is closed, move the nodes (and classes) back to their\n // original place\n dialog.addEventListener(\"close\", () => {\n cutAndPasteNodesAndClasses(dialog, sidebar);\n });\n });\n}\n\n/**\n * When the page loads, or the window resizes, or descendant nodes are added or\n * removed from the main element, check all code blocks and Jupyter notebook\n * outputs, and for each one that has scrollable overflow, set tabIndex = 0.\n */\nfunction addTabStopsToScrollableElements() {\n const updateTabStops = () => {\n document\n .querySelectorAll(\n [\n // code blocks\n \"pre\",\n // NBSphinx notebook output\n \".nboutput > .output_area\",\n // Myst-NB\n \".cell_output > .output\",\n // ipywidgets\n \".jp-RenderedHTMLCommon\",\n // [rST table nodes](https://www.docutils.org/docs/ref/doctree.html#table)\n \".pst-scrollable-table-container\",\n ].join(\", \"),\n )\n .forEach((el) => {\n el.tabIndex =\n el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight\n ? 0\n : -1;\n });\n };\n const debouncedUpdateTabStops = debounce(updateTabStops, 300);\n\n // On window resize\n window.addEventListener(\"resize\", debouncedUpdateTabStops);\n\n // The following MutationObserver is for ipywidgets, which take some time to\n // finish loading and rendering on the page (so even after the \"load\" event is\n // fired, they still have not finished rendering). Would be nice to replace\n // the MutationObserver if there is a way to hook into the ipywidgets code to\n // know when it is done.\n const mainObserver = new MutationObserver(debouncedUpdateTabStops);\n\n // On descendant nodes added/removed from main element\n mainObserver.observe(document.getElementById(\"main-content\"), {\n subtree: true,\n childList: true,\n });\n\n // On page load (when this function gets called)\n updateTabStops();\n}\nfunction debounce(callback, wait) {\n let timeoutId = null;\n return (...args) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n callback(...args);\n }, wait);\n };\n}\n\n/*******************************************************************************\n * Announcement banner - fetch and load remote HTML\n */\nasync function setupAnnouncementBanner() {\n const banner = document.querySelector(\".bd-header-announcement\");\n const { pstAnnouncementUrl } = banner ? banner.dataset : null;\n\n if (!pstAnnouncementUrl) {\n return;\n }\n\n try {\n const response = await fetch(pstAnnouncementUrl);\n if (!response.ok) {\n throw new Error(\n `[PST]: HTTP response status not ok: ${response.status} ${response.statusText}`,\n );\n }\n const data = await response.text();\n if (data.length === 0) {\n console.log(`[PST]: Empty announcement at: ${pstAnnouncementUrl}`);\n return;\n }\n banner.innerHTML = `
${data}
`;\n banner.classList.remove(\"d-none\");\n } catch (_error) {\n console.log(`[PST]: Failed to load announcement at: ${pstAnnouncementUrl}`);\n console.error(_error);\n }\n}\n\n/*******************************************************************************\n * Reveal (and animate) the banners (version warning, announcement) together\n */\nasync function fetchRevealBannersTogether() {\n // Wait until finished fetching and loading banners\n await Promise.allSettled([fetchAndUseVersions(), setupAnnouncementBanner()]);\n\n // The revealer element should have CSS rules that set height to 0, overflow\n // to hidden, and an animation transition on the height (unless the user has\n // turned off animations)\n const revealer = document.querySelector(\".pst-async-banner-revealer\");\n if (!revealer) {\n return;\n }\n\n // Remove the d-none (display-none) class to calculate the children heights.\n revealer.classList.remove(\"d-none\");\n\n // Add together the heights of the element's children\n const height = Array.from(revealer.children).reduce(\n (height, el) => height + el.offsetHeight,\n 0,\n );\n\n // Use the calculated height to give the revealer a non-zero height (if\n // animations allowed, the height change will animate)\n revealer.style.setProperty(\"height\", `${height}px`);\n\n // Wait for a bit more than 300ms (the transition duration), then set height\n // to auto so the banner can resize if the window is resized.\n setTimeout(() => {\n revealer.style.setProperty(\"height\", \"auto\");\n }, 320);\n}\n\n/*******************************************************************************\n * Call functions after document loading.\n */\n\n// This one first to kick off the network request for the version warning\n// and announcement banner data as early as possible.\ndocumentReady(fetchRevealBannersTogether);\n\ndocumentReady(addModeListener);\ndocumentReady(scrollToActive);\ndocumentReady(addTOCInteractivity);\ndocumentReady(setupSearchButtons);\ndocumentReady(setupMobileSidebarKeyboardHandlers);\n\n// Determining whether an element has scrollable content depends on stylesheets,\n// so we're checking for the \"load\" event rather than \"DOMContentLoaded\"\nif (document.readyState === \"complete\") {\n addTabStopsToScrollableElements();\n} else {\n window.addEventListener(\"load\", addTabStopsToScrollableElements);\n}\n"],"names":["documentReady","callback","document","readyState","addEventListener","validate","version","test","semver","compare","v1","v2","operator","assertValidOperator","res","n1","validateAndParse","n2","p1","pop","p2","r","compareSegments","split","compareVersions","operatorResMap","includes","TypeError","match","Error","shift","isWildcard","s","tryParse","v","n","parseInt","isNaN","compareStrings","a","b","ap","bp","String","forceType","i","Math","max","length","allowedOperators","Object","keys","op","indexOf","join","prefersDark","window","matchMedia","autoTheme","e","documentElement","dataset","theme","matches","setTheme","mode","console","error","colorScheme","querySelectorAll","forEach","el","classList","add","remove","localStorage","setItem","log","onchange","cycleMode","defaultMode","currentMode","getItem","arr","nextPosition","findSearchInput","forms","querySelector","toggleSearchField","input","searchDialog","getElementById","open","close","showModal","activeElement","blur","focus","select","scrollIntoView","block","useCommandKey","navigator","platform","closeDialogOnBackdropClick","currentTarget","dialog","clientX","clientY","left","right","top","bottom","getBoundingClientRect","getCurrentUrlPath","DOCUMENTATION_OPTIONS","BUILDER","pagename","endsWith","substring","async","DismissBannerAndStorePref","event","VERSION","now","Date","banner_pref","JSON","parse","debug","stringify","checkPageExistsAndRedirect","preventDefault","currentFilePath","tryUrl","getAttribute","otherDocsHomepage","replace","fetch","method","ok","location","href","err","fetchAndUseVersions","versionSwitcherBtns","hasSwitcherMenu","hasVersionsJSON","hasOwnProperty","wantsWarningBanner","show_version_warning_banner","data","url","currentPath","result","URL","protocol","info","cutoff","origin","response","json","fetchVersionSwitcherJSON","theme_switcher_json_url","btn","hasMatchingPreferredEntry","map","entry","theme_switcher_version_match","preferred","name","some","Boolean","foundMatch","anchor","createElement","setAttribute","span","textContent","appendChild","matchesAndIsPreferred","matchesAndIsFirst","innerText","menu","node","cloneNode","onclick","append","populateVersionSwitcher","preferredEntries","filter","howMany","preferredVersion","preferredURL","versionsAreComparable","dismiss_date_str","dismiss_date","days_passed","floor","banner","middle","inner","bold","button","close_btn","close_x","isDev","newerThanPreferred","createTextNode","showVersionWarningBanner","addTabStopsToScrollableElements","updateTabStops","tabIndex","scrollWidth","clientWidth","scrollHeight","clientHeight","debouncedUpdateTabStops","wait","timeoutId","args","clearTimeout","setTimeout","debounce","MutationObserver","observe","subtree","childList","setupAnnouncementBanner","pstAnnouncementUrl","status","statusText","text","innerHTML","_error","Promise","allSettled","revealer","height","Array","from","children","reduce","offsetHeight","style","setProperty","sidebar","storedScrollTop","sessionStorage","active_pages","latest_active","offset","y","innerHeight","buffer","scrollTop","navLink","parentElement","shortcuts","f","changeSearchShortcutKey","shiftKey","altKey","metaKey","ctrlKey","key","primarySidebar","secondarySidebar","primaryDialog","secondaryDialog","primaryToggle","secondaryToggle","cutAndPasteNodesAndClasses","to","childNodes","cls","toggleButton","stopPropagation"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/build/html/_static/styles/pydata-sphinx-theme.css b/docs/build/html/_static/styles/pydata-sphinx-theme.css index 38adb4505..d26dd09d8 100644 --- a/docs/build/html/_static/styles/pydata-sphinx-theme.css +++ b/docs/build/html/_static/styles/pydata-sphinx-theme.css @@ -3,7 +3,7 @@ * Bootstrap v5.3.3 (https://getbootstrap.com/) * Copyright 2011-2024 The Bootstrap Authors * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13,110,253,.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f;color-scheme:dark}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align)}hr{border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:500;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;text-decoration:underline dotted;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1))}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{word-wrap:break-word;color:var(--bs-code-color);font-size:.875em}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + var(--bs-border-width));padding-top:calc(.375rem + var(--bs-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + var(--bs-border-width));padding-top:calc(.5rem + var(--bs-border-width))}.col-form-label-sm{font-size:.875rem;padding-bottom:calc(.25rem + var(--bs-border-width));padding-top:calc(.25rem + var(--bs-border-width))}.form-text{color:var(--bs-secondary-color);font-size:.875em;margin-top:.25rem}.form-control{appearance:none;background-clip:padding-box;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:var(--bs-body-bg);border-color:#86b7fe;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{background-color:var(--bs-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--bs-border-width);border-radius:0;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0;color:var(--bs-body-color);display:block;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;min-height:calc(1.5em + .5rem + var(--bs-border-width)*2);padding:.25rem .5rem}.form-control-sm::file-selector-button{margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;min-height:calc(1.5em + 1rem + var(--bs-border-width)*2);padding:.5rem 1rem}.form-control-lg::file-selector-button{margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + var(--bs-border-width)*2)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-control-color{height:calc(1.5em + .75rem + var(--bs-border-width)*2);padding:.375rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + var(--bs-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem 2.25rem .375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.form-select-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.125rem;min-height:1.5rem;padding-left:1.5em}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-left:0;padding-right:1.5em;text-align:right}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);flex-shrink:0;height:1em;margin-top:.25em;print-color-adjust:exact;vertical-align:top;width:1em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E");background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(0, 0, 0, 0.25)'/%3E%3C/svg%3E");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out;width:2em}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2386b7fe'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.65;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{appearance:none;background-color:transparent;height:1.5rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range::-moz-range-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--bs-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--bs-border-width)*2)}.form-floating>label{border:var(--bs-border-width) solid transparent;height:100%;left:0;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;text-align:start;text-overflow:ellipsis;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~label:after{background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{align-items:center;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:flex;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding:.5rem 1rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding:.25rem .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:calc(var(--bs-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-left-radius:0;border-top-left-radius:0}.valid-feedback{color:var(--bs-form-valid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--bs-success);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3.75rem + 1.5em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--bs-form-invalid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--bs-danger);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3.75rem + 1.5em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn-check+.btn:hover{background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color);color:var(--bs-btn-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color);color:var(--bs-btn-active-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:400;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--bs-nav-pills-link-active-bg);color:var(--bs-nav-pills-link-active-color)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--bs-nav-underline-link-active-color);font-weight:700}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(33, 37, 41, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb),0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13,110,253,.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:1rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--bs-breadcrumb-font-size);list-style:none;margin-bottom:var(--bs-breadcrumb-margin-bottom);padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider,"/");float:left;padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13,110,253,.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius);color:var(--bs-alert-color);margin-bottom:var(--bs-alert-margin-bottom);padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{padding:1.25rem 1rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.progress-bar{background-color:var(--bs-progress-bar-bg);color:var(--bs-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--bs-progress-bar-transition);white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13,110,253,.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;user-select:none}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{word-wrap:break-word;padding:var(--bs-toast-padding-x)}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:var(--bs-modal-zindex)}.modal-dialog{margin:var(--bs-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);color:var(--bs-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;background-color:var(--bs-backdrop-bg);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:var(--bs-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{align-items:center;border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--bs-modal-header-padding)}.modal-header .btn-close{margin:calc(var(--bs-modal-header-padding-y)*-.5) calc(var(--bs-modal-header-padding-x)*-.5) calc(var(--bs-modal-header-padding-y)*-.5) auto;padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5)}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--bs-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--bs-modal-footer-bg);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--bs-modal-width)}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;word-wrap:break-word;display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);opacity:0;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex)}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);word-wrap:break-word;background-clip:padding-box;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:var(--bs-popover-max-width);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-popover-zindex)}.popover .popover-arrow{display:block;height:var(--bs-popover-arrow-height);width:var(--bs-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--bs-popover-bg);bottom:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--bs-popover-arrow-width);left:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--bs-popover-bg);left:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--bs-popover-bg);top:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);content:"";display:block;left:50%;margin-left:calc(var(--bs-popover-arrow-width)*-.5);position:absolute;top:0;width:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--bs-popover-arrow-width);right:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--bs-popover-bg);right:var(--bs-popover-border-width)}.popover-header{background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius);color:var(--bs-popover-header-color);font-size:var(--bs-popover-header-font-size);margin-bottom:0;padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--bs-popover-body-color);padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);width:var(--bs-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border-right-color:currentcolor;border:var(--bs-spinner-border-width) solid;border-right:var(--bs-spinner-border-width) solid transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:767.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:991.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1399.98px){.offcanvas-xxl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xxl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xxl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom,.offcanvas-xxl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xxl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--bs-offcanvas-padding-y)*-.5) calc(var(--bs-offcanvas-padding-x)*-.5) calc(var(--bs-offcanvas-padding-y)*-.5) auto;padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.5;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-size:200% 100%}@keyframes placeholder-wave{to{mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-secondary{background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-success{background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-info{background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-danger{background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-light{background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-dark{background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{align-items:center;backface-visibility:hidden;display:inline-flex;gap:.375rem;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{fill:currentcolor;flex-shrink:0;height:1em;transition:transform .2s ease-in-out;width:1em}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--bs-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{bottom:0;position:sticky;z-index:1020}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;white-space:nowrap!important;width:1px!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:var(--bs-border-width)}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb),var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb),var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb),var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb),var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb),var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb),var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-end-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-end-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} + */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33,37,41,.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33,37,41,.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0,0,0,.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0,0,0,.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0,0,0,.075);--bs-focus-ring-width:0.1875rem;--bs-focus-ring-opacity:1;--bs-focus-ring-color:var(--pst-color-accent);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222,226,230,.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222,226,230,.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:hsla(0,0%,100%,.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f;color-scheme:dark}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);background-color:var(--bs-body-bg);color:var(--bs-body-color);font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);margin:0;text-align:var(--bs-body-text-align)}hr{border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:500;line-height:1.2;margin-bottom:.5rem;margin-top:0}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;text-decoration:underline dotted;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1))}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{word-wrap:break-word;color:var(--bs-code-color);font-size:.875em}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--bs-secondary-color);font-size:.875em}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}@media (min-width:540px){.container,.container-sm{max-width:540px}}@media (min-width:720px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:960px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:540px;--bs-breakpoint-md:720px;--bs-breakpoint-lg:960px;--bs-breakpoint-xl:1200px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:540px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:720px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:960px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb),0.05);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb),0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb),0.075);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:539.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:719.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:959.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.form-label{margin-bottom:.5rem}.col-form-label{font-size:inherit;line-height:1.5;margin-bottom:0;padding-bottom:calc(.375rem + var(--bs-border-width));padding-top:calc(.375rem + var(--bs-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + var(--bs-border-width));padding-top:calc(.5rem + var(--bs-border-width))}.col-form-label-sm{font-size:.875rem;padding-bottom:calc(.25rem + var(--bs-border-width));padding-top:calc(.25rem + var(--bs-border-width))}.form-text{color:var(--bs-secondary-color);font-size:.875em;margin-top:.25rem}.form-control{appearance:none;background-clip:padding-box;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{background-color:var(--bs-body-bg);border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);color:var(--bs-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.5em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{background-color:var(--bs-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--bs-border-width);border-radius:0;color:var(--bs-body-color);margin:-.375rem -.75rem;margin-inline-end:.75rem;padding:.375rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0;color:var(--bs-body-color);display:block;line-height:1.5;margin-bottom:0;padding:.375rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;min-height:calc(1.5em + .5rem + var(--bs-border-width)*2);padding:.25rem .5rem}.form-control-sm::file-selector-button{margin:-.25rem -.5rem;margin-inline-end:.5rem;padding:.25rem .5rem}.form-control-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;min-height:calc(1.5em + 1rem + var(--bs-border-width)*2);padding:.5rem 1rem}.form-control-lg::file-selector-button{margin:-.5rem -1rem;margin-inline-end:1rem;padding:.5rem 1rem}textarea.form-control{min-height:calc(1.5em + .75rem + var(--bs-border-width)*2)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + var(--bs-border-width)*2)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-control-color{height:calc(1.5em + .75rem + var(--bs-border-width)*2);padding:.375rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + var(--bs-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + var(--bs-border-width)*2)}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem 2.25rem .375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding-bottom:.25rem;padding-left:.5rem;padding-top:.25rem}.form-select-lg{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-left:1rem;padding-top:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.125rem;min-height:1.5rem;padding-left:1.5em}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-left:0;padding-right:1.5em;text-align:right}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-1.5em}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);flex-shrink:0;height:1em;margin-top:.25em;print-color-adjust:exact;vertical-align:top;width:1em}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{--bs-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3E%3C/svg%3E");background-color:#0d6efd;border-color:#0d6efd}.form-check-input:disabled{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(0, 0, 0, 0.25)'/%3E%3C/svg%3E");background-image:var(--bs-form-switch-bg);background-position:0;border-radius:2em;margin-left:-2.5em;transition:background-position .15s ease-in-out;width:2em}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2386b7fe'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E");background-position:100%}.form-switch.form-check-reverse{padding-left:0;padding-right:2.5em}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5em}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.65;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{appearance:none;background-color:transparent;height:1.375rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .1875rem var(--pst-color-accent)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;margin-top:-.25rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range::-moz-range-thumb{appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem;color:transparent;cursor:pointer;height:.5rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--bs-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--bs-border-width)*2)}.form-floating>label{border:var(--bs-border-width) solid transparent;height:100%;left:0;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;text-align:start;text-overflow:ellipsis;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label:after,.form-floating>.form-control:focus~label:after,.form-floating>.form-control:not(:placeholder-shown)~label:after,.form-floating>.form-select~label:after{background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--bs-secondary-bg)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{align-items:center;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);color:var(--bs-body-color);display:flex;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--bs-border-radius-lg);font-size:1.25rem;padding:.5rem 1rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--bs-border-radius-sm);font-size:.875rem;padding:.25rem .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:calc(var(--bs-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-left-radius:0;border-top-left-radius:0}.valid-feedback{color:var(--bs-form-valid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--bs-success);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3.75rem + 1.5em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-success-rgb),1)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--bs-form-invalid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--bs-danger);border-radius:var(--bs-border-radius);color:#fff;display:none;font-size:.875rem;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right calc(.375em + .1875rem) center;background-repeat:no-repeat;background-size:calc(.75em + .375rem) calc(.75em + .375rem);border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + .75rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem);padding-right:calc(1.5em + .75rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem);padding-right:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3.75rem + 1.5em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .1875rem rgba(var(--bs-danger-rgb),1)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.1875rem rgba(var(--bs-btn-focus-shadow-rgb),.5);background-color:var(--bs-btn-bg);border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);color:var(--bs-btn-color);cursor:pointer;display:inline-block;font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);color:var(--bs-btn-hover-color)}.btn-check+.btn:hover{background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color);color:var(--bs-btn-color)}.btn:focus-visible{background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);color:var(--bs-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);box-shadow:var(--bs-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color);color:var(--bs-btn-active-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);color:var(--bs-btn-disabled-color);opacity:var(--bs-btn-disabled-opacity);pointer-events:none}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{height:auto;transition:width .35s ease;width:0}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{border-bottom:0;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:.3em solid;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--pst-color-surface);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:var(--pst-color-surface);--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;background-clip:padding-box;background-color:var(--bs-dropdown-bg);border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);color:var(--bs-dropdown-color);display:none;font-size:var(--bs-dropdown-font-size);list-style:none;margin:0;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--bs-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--bs-dropdown-spacer);top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media (min-width:540px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media (min-width:720px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media (min-width:960px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--bs-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:.3em solid;border-left:.3em solid transparent;border-right:.3em solid transparent;border-top:0;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--bs-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:.3em solid transparent;border-left:.3em solid;border-right:0;border-top:.3em solid transparent;content:"";display:inline-block;margin-left:.255em;vertical-align:.255em}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--bs-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{content:"";display:inline-block;display:none;margin-left:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:before{border-bottom:.3em solid transparent;border-right:.3em solid;border-top:.3em solid transparent;content:"";display:inline-block;margin-right:.255em;vertical-align:.255em}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--bs-dropdown-divider-bg);height:0;margin:var(--bs-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0);clear:both;color:var(--bs-dropdown-link-color);display:block;font-weight:400;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);text-align:inherit;text-decoration:none;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-item.active,.dropdown-item:active{background-color:var(--bs-dropdown-link-active-bg);color:var(--bs-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--bs-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--bs-dropdown-header-color);display:block;font-size:.875rem;margin-bottom:0;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--bs-dropdown-link-color);display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:var(--pst-color-surface);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:var(--pst-color-surface);--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width)*-1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{align-items:flex-start;flex-direction:column;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--bs-nav-link-color);display:block;font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius);margin-bottom:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--bs-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color);color:var(--bs-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--bs-nav-tabs-border-width)*-1)}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--bs-nav-pills-link-active-bg);color:var(--bs-nav-pills-link-active-color)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--bs-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--bs-nav-underline-link-active-color);font-weight:700}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb),0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb),0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb),0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb),1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(33, 37, 41, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb),0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.1875rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--bs-navbar-brand-color);font-size:var(--bs-navbar-brand-font-size);margin-right:var(--bs-navbar-brand-margin-end);padding-bottom:var(--bs-navbar-brand-padding-y);padding-top:var(--bs-navbar-brand-padding-y);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--bs-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);color:var(--bs-navbar-color);font-size:var(--bs-navbar-toggler-font-size);line-height:1;padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--bs-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:540px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:720px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:960px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{background-color:transparent!important;border:0!important;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:hsla(0,0%,100%,.55);--bs-navbar-hover-color:hsla(0,0%,100%,.75);--bs-navbar-disabled-color:hsla(0,0%,100%,.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.55)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb),0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius);color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--bs-accordion-btn-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{align-items:center;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;color:var(--bs-accordion-btn-color);display:flex;font-size:1rem;overflow-anchor:none;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--bs-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(var(--bs-accordion-border-width)*-1) 0 var(--bs-accordion-border-color);color:var(--bs-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--bs-accordion-btn-icon-width);margin-left:auto;transition:var(--bs-accordion-btn-icon-transition);width:var(--bs-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);color:var(--bs-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--bs-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E");--bs-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--bs-breadcrumb-font-size);list-style:none;margin-bottom:var(--bs-breadcrumb-margin-bottom);padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider,"/");float:left;padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);color:var(--bs-pagination-color);display:block;font-size:var(--bs-pagination-font-size);padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);position:relative;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color);color:var(--bs-pagination-hover-color);z-index:2}.page-link:focus{background-color:var(--bs-pagination-focus-bg);box-shadow:var(--bs-pagination-focus-box-shadow);color:var(--bs-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color);color:var(--bs-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color);color:var(--bs-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width)*-1)}.page-item:first-child .page-link{border-bottom-left-radius:var(--bs-pagination-border-radius);border-top-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--bs-pagination-border-radius);border-top-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);border-radius:var(--bs-badge-border-radius);color:var(--bs-badge-color);display:inline-block;font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius);color:var(--bs-alert-color);margin-bottom:var(--bs-alert-margin-bottom);padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--bs-alert-link-color);font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{padding:1.25rem 1rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius);display:flex;font-size:var(--bs-progress-font-size);height:var(--bs-progress-height);overflow:hidden}.progress-bar{background-color:var(--bs-progress-bar-bg);color:var(--bs-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--bs-progress-bar-transition);white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@media (min-width:540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.1875rem var(--pst-color-accent);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;box-sizing:content-box;height:1em;opacity:var(--bs-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--bs-btn-close-color)}.btn-close:hover{opacity:var(--bs-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--bs-btn-close-disabled-opacity);pointer-events:none;user-select:none}.btn-close-white,[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb),0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);background-clip:padding-box;background-color:var(--bs-toast-bg);border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);border-radius:var(--bs-toast-border-radius);box-shadow:var(--bs-toast-box-shadow);color:var(--bs-toast-color);font-size:var(--bs-toast-font-size);max-width:100%;pointer-events:auto;width:var(--bs-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:max-content;z-index:var(--bs-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--bs-toast-header-bg);border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));color:var(--bs-toast-header-color);display:flex;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x)}.toast-header .btn-close{margin-left:var(--bs-toast-padding-x);margin-right:calc(var(--bs-toast-padding-x)*-.5)}.toast-body{word-wrap:break-word;padding:var(--bs-toast-padding-x)}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:var(--bs-modal-zindex)}.modal-dialog{margin:var(--bs-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-50px);transition:transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--bs-modal-bg);border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);color:var(--bs-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;background-color:var(--bs-backdrop-bg);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:var(--bs-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{align-items:center;border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--bs-modal-header-padding)}.modal-header .btn-close{margin:calc(var(--bs-modal-header-padding-y)*-.5) calc(var(--bs-modal-header-padding-x)*-.5) calc(var(--bs-modal-header-padding-y)*-.5) auto;padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5)}.modal-title{line-height:var(--bs-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--bs-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--bs-modal-footer-bg);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media (min-width:540px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--bs-modal-width)}.modal-sm{--bs-modal-width:300px}}@media (min-width:960px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:539.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:719.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:959.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;word-wrap:break-word;display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;margin:var(--bs-tooltip-margin);opacity:0;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-tooltip-zindex)}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--bs-tooltip-arrow-height);width:var(--bs-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--bs-tooltip-bg);border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--bs-tooltip-arrow-width);left:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--bs-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--bs-tooltip-bg);border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--bs-tooltip-arrow-width);right:calc(var(--bs-tooltip-arrow-height)*-1);width:var(--bs-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--bs-tooltip-bg);border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius);color:var(--bs-tooltip-color);max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);text-align:center}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);word-wrap:break-word;background-clip:padding-box;background-color:var(--bs-popover-bg);border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius);display:block;font-family:var(--bs-font-sans-serif);font-size:var(--bs-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.5;max-width:var(--bs-popover-max-width);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--bs-popover-zindex)}.popover .popover-arrow{display:block;height:var(--bs-popover-arrow-height);width:var(--bs-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-top>.popover-arrow:before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--bs-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--bs-popover-bg);bottom:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--bs-popover-arrow-width);left:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-end>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--bs-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--bs-popover-bg);left:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:before{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--bs-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--bs-popover-bg);top:var(--bs-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg);content:"";display:block;left:50%;margin-left:calc(var(--bs-popover-arrow-width)*-.5);position:absolute;top:0;width:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--bs-popover-arrow-width);right:calc((var(--bs-popover-arrow-height))*-1 - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-start>.popover-arrow:before{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--bs-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--bs-popover-bg);right:var(--bs-popover-border-width)}.popover-header{background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius);color:var(--bs-popover-header-color);font-size:var(--bs-popover-header-font-size);margin-bottom:0;padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--bs-popover-body-color);padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:2rem;width:2rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3E%3Cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);width:var(--bs-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border-right-color:currentcolor;border:var(--bs-spinner-border-width) solid;border-right:var(--bs-spinner-border-width) solid transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:539.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:539.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:539.98px){.offcanvas-sm.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:540px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:719.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:719.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:719.98px){.offcanvas-md.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:720px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:959.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:959.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:959.98px){.offcanvas-lg.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:960px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--bs-offcanvas-bg);bottom:0;color:var(--bs-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--bs-offcanvas-transition);visibility:hidden;z-index:var(--bs-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-end{border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--bs-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--bs-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#000;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{align-items:center;display:flex;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--bs-offcanvas-padding-y)*-.5) calc(var(--bs-offcanvas-padding-x)*-.5) calc(var(--bs-offcanvas-padding-y)*-.5) auto;padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--bs-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.5;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-size:200% 100%}@keyframes placeholder-wave{to{mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-secondary{background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-success{background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-info{background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-warning{background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-danger{background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.text-bg-light{background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important;color:#000!important}.text-bg-dark{background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important;color:#fff!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);outline:0}.icon-link{align-items:center;backface-visibility:hidden;display:inline-flex;gap:.375rem;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{fill:currentcolor;flex-shrink:0;height:1em;transition:transform .2s ease-in-out;width:1em}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--bs-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media (min-width:540px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:720px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:960px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{bottom:0;position:sticky;z-index:1020}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;white-space:nowrap!important;width:1px!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.25;width:var(--bs-border-width)}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb),var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb),var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb),var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb),var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb),var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb),var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb),var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-end-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-end-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:540px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:720px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:960px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:3rem!important;padding-top:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} /*! * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) @@ -26,7 +26,7 @@ * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2024 Fonticons, Inc. - */:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(../vendor/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}html{--pst-header-height:4rem;--pst-header-article-height:calc(var(--pst-header-height)*2/3);--pst-sidebar-secondary:17rem;--pst-font-size-base:1rem;--pst-font-size-h1:2.625rem;--pst-font-size-h2:2.125rem;--pst-font-size-h3:1.75rem;--pst-font-size-h4:1.5rem;--pst-font-size-h5:1.25rem;--pst-font-size-h6:1rem;--pst-font-size-milli:0.9rem;--pst-sidebar-font-size:0.9rem;--pst-sidebar-font-size-mobile:1.1rem;--pst-sidebar-header-font-size:1.2rem;--pst-sidebar-header-font-weight:600;--pst-admonition-font-weight-heading:600;--pst-font-weight-caption:300;--pst-font-weight-heading:600;--pst-font-family-base-system:-apple-system,"BlinkMacSystemFont","Segoe UI","Helvetica Neue","Arial",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--pst-font-family-monospace-system:"SFMono-Regular","Menlo","Consolas","Monaco","Liberation Mono","Lucida Console",monospace;--pst-font-family-base:var(--pst-font-family-base-system);--pst-font-family-heading:var(--pst-font-family-base-system);--pst-font-family-monospace:var(--pst-font-family-monospace-system);--pst-font-size-icon:1.5rem;--pst-icon-check-circle:"";--pst-icon-info-circle:"";--pst-icon-exclamation-triangle:"";--pst-icon-exclamation-circle:"";--pst-icon-times-circle:"";--pst-icon-lightbulb:"";--pst-icon-download:"";--pst-icon-angle-left:"";--pst-icon-angle-right:"";--pst-icon-external-link:"";--pst-icon-search-minus:"";--pst-icon-github:"";--pst-icon-gitlab:"";--pst-icon-share:"";--pst-icon-bell:"";--pst-icon-pencil:"";--pst-breadcrumb-divider:"";--pst-icon-admonition-default:var(--pst-icon-bell);--pst-icon-admonition-note:var(--pst-icon-info-circle);--pst-icon-admonition-attention:var(--pst-icon-exclamation-circle);--pst-icon-admonition-caution:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-warning:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-danger:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-error:var(--pst-icon-times-circle);--pst-icon-admonition-hint:var(--pst-icon-lightbulb);--pst-icon-admonition-tip:var(--pst-icon-lightbulb);--pst-icon-admonition-important:var(--pst-icon-exclamation-circle);--pst-icon-admonition-seealso:var(--pst-icon-share);--pst-icon-admonition-todo:var(--pst-icon-pencil);--pst-icon-versionmodified-default:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-added:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-changed:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-deprecated:var(--pst-icon-exclamation-circle);font-size:var(--pst-font-size-base);scroll-padding-top:calc(var(--pst-header-height) + 1rem)}body{background-color:var(--pst-color-background);color:var(--pst-color-text-base);display:flex;flex-direction:column;font-family:var(--pst-font-family-base);font-weight:400;line-height:1.65;min-height:100vh}body::-webkit-scrollbar-track{background-color:var(--pst-color-background)}p{font-size:1em;margin-bottom:1.15rem}p.rubric{border-bottom:1px solid var(--pst-color-border)}p.centered{text-align:center}a{word-wrap:break-word;color:var(--pst-color-link);text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}a:hover{color:var(--pst-color-link-hover);text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}a:active,a:visited{color:var(--pst-color-link)}a:visited:hover{color:var(--pst-color-link-hover)}a.headerlink{color:var(--pst-color-secondary);font-size:.8em;margin-left:.2em;padding:0 4px;text-decoration:none;user-select:none}a.github:before,a.gitlab:before{color:var(--pst-color-text-muted);font:var(--fa-font-brands);margin-right:.25rem}a.github:before{content:var(--pst-icon-github)}a.gitlab:before{content:var(--pst-icon-gitlab)}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:var(--pst-font-family-heading);font-weight:var(--pst-font-weight-heading);line-height:1.15;margin:2.75rem 0 1.05rem}.h1,h1{font-size:var(--pst-font-size-h1);margin-top:0}.h1,.h2,h1,h2{color:var(--pst-heading-color)}.h2,h2{font-size:var(--pst-font-size-h2)}.h3,h3{font-size:var(--pst-font-size-h3)}.h3,.h4,h3,h4{color:var(--pst-heading-color)}.h4,h4{font-size:var(--pst-font-size-h4)}.h5,h5{font-size:var(--pst-font-size-h5)}.h5,.h6,h5,h6{color:var(--pst-color-text-base)}.h6,h6{font-size:var(--pst-font-size-h6)}.small,.text_small,small{font-size:var(--pst-font-size-milli)}hr{border:0;border-top:1px solid var(--pst-color-border)}code,kbd,pre,samp{font-family:var(--pst-font-family-monospace)}kbd{background-color:var(--pst-color-on-background);color:var(--pst-color-text-muted)}kbd:not(.compound){border:1px solid var(--pst-color-border);box-shadow:1px 1px 1px var(--pst-color-shadow);margin:0 .1rem;padding:.1rem .4rem}code{color:var(--pst-color-inline-code)}pre{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;color:var(--pst-color-text-base);line-height:1.2em;margin:1.5em 0;padding:1rem}pre .linenos{opacity:.8;padding-right:10px}#pst-back-to-top{background-color:var(--pst-color-secondary);border:none;color:var(--pst-color-secondary-text);display:none;left:50vw;position:fixed;top:90vh;transform:translate(-50%);z-index:1080}#pst-back-to-top .fa-arrow-up{margin-inline-end:.5em}#pst-back-to-top:hover{background-color:var(--pst-color-secondary-highlight);color:var(--pst-color-link-hover);color:var(--pst-color-secondary-highlight-text);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}#pst-back-to-top:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem;outline-color:var(--pst-color-secondary);outline-offset:.1875rem}:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem}.skip-link{background-color:var(--pst-color-warning);border-bottom:1px solid var(--pst-color-border);left:0;padding:.5rem;position:fixed;right:0;text-align:center;top:0;transform:translateY(-100%);transition:transform .15s ease-in-out;z-index:1055}.skip-link:focus-within{transform:translateY(0)}.skip-link a{color:var(--pst-color-warning-text)!important}.skip-link a:focus-visible{outline-color:#14181e}.bd-container{display:flex;flex-grow:1;justify-content:center}.bd-container .bd-container__inner{display:flex}.bd-page-width{width:100%}@media (min-width:960px){.bd-page-width{max-width:88rem}}.pst-async-banner-revealer{height:0;overflow:hidden;transition:height .3s ease-in-out}@media (prefers-reduced-motion){.pst-async-banner-revealer{transition:none}}#bd-header-version-warning,.bd-header-announcement{align-items:center;display:flex;justify-content:center;min-height:3rem;padding:.5rem 12.5%;position:relative;text-align:center;width:100%}@media (max-width:959.98px){#bd-header-version-warning,.bd-header-announcement{padding:.5rem 2%}}#bd-header-version-warning p,.bd-header-announcement p{font-weight:700;margin:0}#bd-header-version-warning a,.bd-header-announcement a{color:var(--pst-color-inline-code-links)}#bd-header-version-warning .pst-button-link-to-stable-version,.bd-header-announcement .pst-button-link-to-stable-version{background-color:var(--pst-color-danger);border-color:var(--pst-color-danger);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;color:var(--pst-color-danger-text)}#bd-header-version-warning .pst-button-link-to-stable-version:hover,.bd-header-announcement .pst-button-link-to-stable-version:hover{background-color:var(--pst-color-danger-highlight);border-color:var(--pst-color-danger-highlight);color:var(--pst-color-link-hover);color:var(--pst-color-danger-highlight-text);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}#bd-header-version-warning .pst-button-link-to-stable-version:focus-visible,.bd-header-announcement .pst-button-link-to-stable-version:focus-visible{outline:.1875rem solid var(--pst-color-danger);outline-offset:.1875rem}.bd-header-announcement{background-color:var(--pst-color-secondary-bg)}#bd-header-version-warning{background-color:var(--pst-color-danger-bg)}.bd-main{display:flex;flex-direction:column;flex-grow:1;min-width:0}.bd-main .bd-content{display:flex;height:100%;justify-content:center}.bd-main .bd-content .bd-article-container{display:flex;flex-direction:column;justify-content:start;max-width:60em;overflow-x:auto;padding:1rem;width:100%}@media (min-width:1200px){.bd-main .bd-content .bd-article-container .bd-article{padding-left:2rem;padding-top:1.5rem}}.bd-footer{border-top:1px solid var(--pst-color-border);width:100%}.bd-footer .bd-footer__inner{display:flex;flex-grow:1;margin:auto;padding:1rem}.bd-footer .footer-items__center,.bd-footer .footer-items__end,.bd-footer .footer-items__start{display:flex;flex-direction:column;flex-grow:1;gap:.5rem;justify-content:center}.bd-footer .footer-items__center{text-align:center}.bd-footer .footer-items__end{text-align:end}.bd-footer .footer-item p{margin-bottom:0}.bd-footer-article{margin-top:auto}.bd-footer-article .footer-article-items{display:flex;flex-direction:column}.bd-footer-content .footer-content-items{display:flex;flex-direction:column;margin-top:auto}.bd-header{background-color:var(--pst-color-on-background)!important;box-shadow:0 .125rem .25rem 0 var(--pst-color-shadow);justify-content:center;max-width:100vw;padding:0;position:sticky;top:0;width:100%;z-index:1030}.bd-header .bd-header__inner{align-items:center;display:flex;height:fit-content;padding-left:1rem;padding-right:1rem}.bd-header :focus-visible{border-radius:.125rem}.bd-header .navbar-item{align-items:center;display:flex;height:var(--pst-header-height);max-height:var(--pst-header-height)}.bd-header .navbar-header-items{display:none;flex-shrink:1}@media (min-width:960px){.bd-header .navbar-header-items{display:inherit;flex-grow:1;padding:0 0 0 .5rem}}.bd-header .navbar-header-items__center,.bd-header .navbar-header-items__end,.bd-header .navbar-header-items__start{align-items:center;display:flex;flex-flow:wrap;row-gap:0}.bd-header .navbar-header-items__center,.bd-header .navbar-header-items__end{column-gap:1.12rem}.bd-header .navbar-header-items__start{flex-shrink:0;gap:.5rem;margin-right:auto}.bd-header .navbar-header-items__end{justify-content:end}.bd-header ul.navbar-nav{display:flex}@media (min-width:960px){.bd-header ul.navbar-nav{align-items:baseline}}.bd-header ul.navbar-nav>li.nav-item{margin-inline:2px}.bd-header ul.navbar-nav>li.nav-item>.nav-link{color:var(--pst-color-text-muted);padding-inline:6px;position:relative}.bd-header ul.navbar-nav>li.nav-item>.nav-link:before{background-color:transparent;content:"";display:block;inset:0;bottom:calc(max(3px, .1875rem, .12em)*-1);margin:max(3px,.1875rem,.12em) 0;position:absolute}.bd-header ul.navbar-nav>li.nav-item>.nav-link:hover{color:var(--pst-color-secondary);text-decoration:none}.bd-header ul.navbar-nav>li.nav-item>.nav-link:hover:before{border-bottom:max(3px,.1875rem,.12em) solid var(--pst-color-secondary)}.bd-header ul.navbar-nav>li.nav-item>.nav-link:focus-visible{box-shadow:none;outline:3px solid var(--pst-color-accent);outline-offset:3px}.bd-header ul.navbar-nav>li.nav-item.current>.nav-link{color:var(--pst-color-primary)}.bd-header ul.navbar-nav>li.nav-item.current>.nav-link:before{border-bottom:3px solid var(--pst-color-primary)}.bd-header ul.navbar-nav>li.nav-item.dropdown{margin-inline:4px}.bd-header ul.navbar-nav>li.nav-item.dropdown button{padding-inline:8px}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle{border-radius:.125rem;color:var(--pst-color-text-muted)}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle:hover{box-shadow:0 0 0 .1875rem var(--pst-color-link-hover);color:var(--pst-color-text-base);text-decoration:none}.bd-header ul.navbar-nav li a.nav-link.dropdown-item{color:var(--pst-color-text-muted);text-decoration:none}.bd-header ul.navbar-nav li a.nav-link.dropdown-item:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.bd-header ul.navbar-nav .dropdown button{border:none;display:unset}.bd-header ul.navbar-nav .dropdown button:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.bd-header ul.navbar-nav .dropdown .dropdown-menu{background-color:var(--pst-color-on-background);border:1px solid var(--pst-color-border);box-shadow:0 0 .3rem .1rem var(--pst-color-shadow);margin:.5rem 0;min-width:20rem;padding:.5rem 0;z-index:1070}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item{padding:.25rem 1.5rem}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus:not(:hover,:active){background-color:inherit}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus-visible{z-index:10}.bd-header ul.navbar-nav .dropdown .dropdown-menu:not(.show){display:none}.bd-header button.sidebar-toggle{background-color:inherit;color:var(--pst-color-muted);font-size:var(--pst-font-size-icon);margin-bottom:0;padding:.5rem}.bd-header button.primary-toggle{margin-right:1rem}@media (min-width:960px){.bd-header button.primary-toggle{display:none}}.bd-header button.secondary-toggle{margin-left:1rem}@media (min-width:1200px){.bd-header button.secondary-toggle{display:none}}@media (min-width:960px){.navbar-center-items .navbar-item{display:inline-block}}.nav-link{transition:none}.nav-link:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.nav-link.nav-external:after{content:var(--pst-icon-external-link);font:var(--fa-font-solid);font-size:.75em;margin-left:.3em}.bd-navbar-elements li.nav-item i{font-size:.7rem;padding-left:2px;vertical-align:middle}.navbar-persistent--mobile{margin-left:auto}@media (min-width:960px){.navbar-persistent--mobile{display:none}}.navbar-persistent--container{display:none}@media (min-width:960px){.navbar-persistent--container{display:flex}}.header-article__inner{padding:0 .5rem}.header-article__inner .header-article-item{min-height:var(--pst-header-article-height)}.header-article__inner .header-article-items__end{margin-left:auto}.bd-sidebar-primary{background-color:var(--pst-color-background);border-right:1px solid var(--pst-color-border);display:flex;flex:0 0 auto;flex-direction:column;font-size:var(--pst-sidebar-font-size-mobile);gap:1rem;max-height:calc(100vh - var(--pst-header-height));overflow-y:auto;padding:2rem 1rem 1rem;position:sticky;top:var(--pst-header-height);width:25%}@media (min-width:960px){.bd-sidebar-primary{font-size:var(--pst-sidebar-font-size)}}.bd-sidebar-primary :focus-visible{border-radius:.125rem}.bd-sidebar-primary .nav-link{font-size:var(--pst-sidebar-font-size-mobile)}.bd-sidebar-primary.no-sidebar{border-right:0}@media (min-width:960px){.bd-sidebar-primary.hide-on-wide{display:none}}.bd-sidebar-primary .h1,.bd-sidebar-primary .h2,.bd-sidebar-primary .h3,.bd-sidebar-primary .h4,.bd-sidebar-primary h1,.bd-sidebar-primary h2,.bd-sidebar-primary h3,.bd-sidebar-primary h4{color:var(--pst-color-text-base)}.bd-sidebar-primary .sidebar-primary-items__end .sidebar-primary-item,.bd-sidebar-primary .sidebar-primary-items__start .sidebar-primary-item{padding:.5rem 0}.bd-sidebar-primary .sidebar-header-items{display:flex;flex-direction:column}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__title{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-header-font-size);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.bd-sidebar-primary .sidebar-header-items .bd-navbar-elements .nav-link:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem;outline-offset:.1875rem}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__center{display:flex;flex-direction:column}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__end{align-items:center;display:flex;gap:1rem}@media (min-width:960px){.bd-sidebar-primary .sidebar-header-items{display:none}}.bd-sidebar-primary .sidebar-primary-items__start{border-top:1px solid var(--pst-color-border)}@media (min-width:960px){.bd-sidebar-primary .sidebar-primary-items__start{border-top:none}}.bd-sidebar-primary .sidebar-primary-items__end{margin-bottom:1em;margin-top:auto}.bd-sidebar-primary .list-caption{list-style:none;padding-left:0}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary{align-items:baseline;display:flex;height:auto;justify-content:space-between;position:relative;width:auto}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary .toctree-toggle{flex:0 0 auto}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary .toctree-toggle .fa-chevron-down{font-size:1rem}.bd-sidebar-primary li.has-children{position:relative}.bd-sidebar-primary li.has-children .caption,.bd-sidebar-primary li.has-children>.reference{margin-right:calc(30px + .1875rem);padding-top:.25rem}.bd-sidebar-primary li.has-children>details>summary{list-style:none}.bd-sidebar-primary li.has-children>details>summary::-webkit-details-marker{display:none}.bd-sidebar-primary li.has-children>details>summary:focus-visible{outline:none}.bd-sidebar-primary li.has-children>details>summary:focus-visible>.toctree-toggle{outline:var(--pst-color-accent) solid .1875rem;outline-offset:-.1875rem}.bd-sidebar-primary li.has-children>details>summary .toctree-toggle{align-items:center;cursor:pointer;display:inline-flex;height:30px;justify-content:center;position:absolute;right:0;top:0;width:30px}.bd-sidebar-primary li.has-children>details>summary .toctree-toggle .fa-chevron-down{font-size:.75rem}.bd-sidebar-primary li.has-children>details[open]>summary .fa-chevron-down{transform:rotate(180deg)}nav.bd-links{margin-right:-1rem}@media (min-width:960px){nav.bd-links{display:block}}nav.bd-links ul{display:block;list-style:none}nav.bd-links ul ul{padding:0 0 0 1rem}nav.bd-links li>a{box-shadow:none;color:var(--pst-color-text-muted);display:block;margin-right:.1875rem;padding:.25rem .65rem;text-decoration:none}nav.bd-links li>a:hover{background-color:transparent;text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}nav.bd-links li>a:active,nav.bd-links li>a:hover{color:var(--pst-color-link-hover)}nav.bd-links li>a:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:none;z-index:10}nav.bd-links li>a.reference.external:after{content:var(--pst-icon-external-link);font:var(--fa-font-solid);font-size:.75em;margin-left:.3em}nav.bd-links .current>a{background-color:transparent;box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600}nav.bd-links .current>a:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}nav.bd-links p.bd-links__title{font-size:var(--pst-sidebar-header-font-size)}nav.bd-links p.bd-links__title,nav.bd-links p.caption{font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}nav.bd-links p.caption{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-font-size-mobile);margin-top:1.25rem;position:relative}nav.bd-links p.caption:first-child{margin-top:0}@media (min-width:960px){nav.bd-links p.caption{font-size:var(--pst-sidebar-font-size)}}.bd-sidebar-secondary{background-color:var(--pst-color-background);display:flex;flex-direction:column;flex-shrink:0;font-size:var(--pst-sidebar-font-size-mobile);max-height:calc(100vh - var(--pst-header-height));order:2;overflow-y:auto;padding:2rem 1rem 1rem;position:sticky;top:var(--pst-header-height);width:var(--pst-sidebar-secondary)}@media (min-width:1200px){.bd-sidebar-secondary{font-size:var(--pst-sidebar-font-size)}}.sidebar-secondary-item{padding:.5rem}@media (min-width:1200px){.sidebar-secondary-item{border-left:1px solid var(--pst-color-border);padding-left:1rem}}.sidebar-secondary-item i{padding-right:.5rem}.bd-sidebar::backdrop{background-color:#000;opacity:.5}@media (max-width:959.98px){.bd-sidebar-primary{border:0;flex-grow:0.75;height:100vh;left:0;margin-left:-75%;max-height:100vh;max-width:350px;position:fixed;top:0;transition:visibility .2s ease-out,margin .2s ease-out;visibility:hidden;width:75%;z-index:1055}}.bd-sidebar-primary[open]{margin-left:0;visibility:visible}@media (max-width:1199.98px){.bd-sidebar-secondary{border:0;flex-grow:0.75;height:100vh;margin-right:-75%;max-height:100vh;max-width:350px;position:fixed;right:0;top:0;transition:visibility .2s ease-out,margin .2s ease-out;visibility:hidden;width:75%;z-index:1055}}.bd-sidebar-secondary[open]{margin-right:0;visibility:visible}ul.bd-breadcrumbs{display:flex;flex-wrap:wrap;font-size:.8rem;list-style:none;padding-left:0}ul.bd-breadcrumbs li.breadcrumb-item{align-items:center;display:flex;font-weight:700;overflow-x:hidden;white-space:nowrap}ul.bd-breadcrumbs li.breadcrumb-item .ellipsis,ul.bd-breadcrumbs li.breadcrumb-item a{margin:.1875rem;overflow-x:hidden;text-overflow:ellipsis}ul.bd-breadcrumbs li.breadcrumb-item a{color:var(--pst-color-text-muted);text-decoration:none}ul.bd-breadcrumbs li.breadcrumb-item a:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}ul.bd-breadcrumbs li.breadcrumb-item:not(.breadcrumb-home):before{color:var(--pst-color-text-muted);content:var(--pst-breadcrumb-divider);font:var(--fa-font-solid);font-size:.8rem;padding:0 .5rem}html .pst-navbar-icon{align-items:center;border:none;border-radius:0;box-sizing:border-box;color:var(--pst-color-text-muted);display:flex;font-size:1rem;height:2.15rem;justify-content:center;line-height:1.65;min-height:24px;min-width:24px;padding:.25rem 0;position:relative}html .pst-navbar-icon:before{background-color:transparent;content:"";display:block;inset:0;bottom:calc(max(3px, .1875rem, .12em)*-1);margin:max(3px,.1875rem,.12em) 0;position:absolute}html .pst-navbar-icon:hover{color:var(--pst-color-secondary);text-decoration:none}html .pst-navbar-icon:hover:before{border-bottom:max(3px,.1875rem,.12em) solid var(--pst-color-secondary)}html .pst-navbar-icon:focus-visible{box-shadow:none;outline:3px solid var(--pst-color-accent);outline-offset:3px}ul.navbar-icon-links{align-items:center;column-gap:1.12rem;display:flex;flex-flow:row wrap;justify-content:space-evenly;list-style:none;margin-bottom:0;padding-left:0}ul.navbar-icon-links i.fa-brands,ul.navbar-icon-links i.fa-regular,ul.navbar-icon-links i.fa-solid{font-size:var(--pst-font-size-icon);font-style:normal;vertical-align:middle}ul.navbar-icon-links i.fa-square-twitter:before{color:#55acee}ul.navbar-icon-links i.fa-square-gitlab:before{color:#548}ul.navbar-icon-links i.fa-bitbucket:before{color:#0052cc}ul.navbar-icon-links img.icon-link-image{border-radius:.2rem;height:1.5em}ul.navbar-icon-links .fa-pydata{stroke:var(--pst-color-background);stroke-linejoin:round;stroke-width:.35}.navbar-brand{align-items:center;display:flex;flex-shrink:0;gap:.5rem;height:var(--pst-header-height);margin:0;max-height:var(--pst-header-height);padding:.5rem 0;position:relative;width:auto}.navbar-brand p{color:var(--pst-color-text-base);margin-bottom:0}.navbar-brand img{height:100%;max-width:100%;width:auto}.navbar-brand:hover,.navbar-brand:visited:hover{color:var(--pst-color-link-hover);color:var(--pst-color-text-base);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}ul.navbar-nav ul{padding:0 0 0 1rem}ul.navbar-nav li{display:flex;flex-direction:column}ul.navbar-nav li a{align-items:center;color:var(--pst-color-text-muted);display:flex;height:100%;padding-bottom:.25rem;padding-top:.25rem;text-decoration:none}ul.navbar-nav li a:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.page-toc .section-nav{border-bottom:none;padding-left:0}.page-toc .section-nav ul{padding-left:1rem}.page-toc .nav-link{font-size:var(--pst-sidebar-font-size-mobile)}@media (min-width:1200px){.page-toc .nav-link{font-size:var(--pst-sidebar-font-size)}}.page-toc .onthispage{color:var(--pst-color-text-base);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.prev-next-area{width:100%}.prev-next-area p{color:var(--pst-color-text-muted);line-height:1.3em;margin:0 .3em}.prev-next-area i{font-size:1.2em}.prev-next-area a{align-items:center;border:none;color:var(--pst-color-text-muted);display:flex;max-width:45%;overflow-x:hidden;padding:10px;text-decoration:none}.prev-next-area a p.prev-next-title{word-wrap:break-word;color:var(--pst-color-link);font-size:1.1em;font-weight:var(--pst-admonition-font-weight-heading);text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}.prev-next-area a p.prev-next-title:hover{color:var(--pst-color-link-hover);text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}.prev-next-area a p.prev-next-title:active,.prev-next-area a p.prev-next-title:visited{color:var(--pst-color-link)}.prev-next-area a p.prev-next-title:visited:hover{color:var(--pst-color-link-hover)}.prev-next-area a:hover p.prev-next-title,.prev-next-area a:visited:hover p.prev-next-title{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.prev-next-area a .prev-next-info{flex-direction:column;margin:0 .5em}.prev-next-area a .prev-next-info .prev-next-subtitle{text-transform:capitalize}.prev-next-area a.left-prev{float:left}.prev-next-area a.right-next{float:right}.prev-next-area a.right-next div.prev-next-info{text-align:right}.bd-search{border:1px solid var(--pst-color-border);border-radius:.25rem;color:var(--pst-color-text-base);gap:.5rem;padding-left:.5rem;position:relative}.bd-search,.bd-search:active{background-color:var(--pst-color-background)}.bd-search:active{color:var(--pst-color-text-muted)}.bd-search:focus-within{box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.bd-search:focus-within input:focus{box-shadow:none}.bd-search .icon{color:var(--pst-color-border);left:25px;position:absolute}.bd-search .fa-solid.fa-magnifying-glass{color:var(--pst-color-text-muted);left:calc(1.25rem - .35em);position:absolute}.bd-search input.form-control{background-color:var(--pst-color-background);border:none;color:var(--pst-color-text-base)}.bd-search input.form-control::placeholder{color:var(--pst-color-text-muted)}.bd-search input.form-control::-webkit-search-cancel-button,.bd-search input.form-control::-webkit-search-decoration{appearance:none}.bd-search input.form-control:focus,.bd-search input.form-control:focus-visible{color:var(--pst-color-text-muted)}.bd-search .search-button__kbd-shortcut{color:var(--pst-color-border);display:none;margin-inline-end:.5rem}@media (min-width:720px){.bd-search .search-button__kbd-shortcut{display:flex}}.search-button i{font-size:1.3rem}#pst-search-dialog{display:none}#pst-search-dialog[open]{background-color:transparent;border:none;display:flex;left:50%;margin-top:.5rem;max-width:800px;padding:.1875rem;position:fixed;right:1rem;top:30%;transform:translate(-50%,-50%);width:90%;z-index:1055}#pst-search-dialog[open]::backdrop{background-color:#000;opacity:.5}#pst-search-dialog[open] form.bd-search{flex-grow:1}#pst-search-dialog[open] form.bd-search input,#pst-search-dialog[open] form.bd-search svg{font-size:var(--pst-font-size-icon)}.search-button-field{align-items:center;background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:1.5em;color:var(--pst-color-text-muted);display:inline-flex;padding:.5em}.search-button-field:hover{box-shadow:0 0 0 .1875rem var(--pst-color-link-hover)}.search-button-field:focus-visible{border-radius:1.5em}.search-button-field .search-button__default-text{font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);margin-left:.5em;margin-right:.5em}.search-button-field .kbd-shortcut__modifier{font-size:.75em}.search-button-field>*{align-items:center}.search-button-field>:not(svg){display:none}@media (min-width:960px){.search-button-field>:not(svg){display:flex}}div#searchbox p.highlight-link{box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;margin:1rem 0;width:fit-content}@media (min-width:1200px){div#searchbox p.highlight-link{margin-left:2rem}}div#searchbox p.highlight-link a{background-color:var(--pst-color-primary);border-radius:.25rem;color:var(--pst-color-primary-text);font-size:1.25rem;padding:.75rem;text-decoration:none;transition:box-shadow .25s ease-out}div#searchbox p.highlight-link a:hover{box-shadow:inset 0 0 50px 50px rgba(0,0,0,.25)}div#searchbox p.highlight-link a:before{color:unset;content:var(--pst-icon-search-minus);font:var(--fa-font-solid);margin-right:.5rem}.theme-switch-button .theme-switch{display:none}.theme-switch-button .theme-switch:active{color:var(--pst-color-link-hover);text-decoration:none}.theme-switch-button .theme-switch .fa-lg{aspect-ratio:1/1}html[data-mode=auto] .theme-switch-button .theme-switch[data-mode=auto],html[data-mode=dark] .theme-switch-button .theme-switch[data-mode=dark],html[data-mode=light] .theme-switch-button .theme-switch[data-mode=light]{display:inline}button.btn.version-switcher__button{border-color:var(--pst-color-border);color:var(--pst-color-text-base);margin-bottom:1em}@media (min-width:960px){button.btn.version-switcher__button{margin-bottom:unset}}button.btn.version-switcher__button:hover{border-color:transparent;box-shadow:0 0 0 .1875rem var(--pst-color-secondary)}button.btn.version-switcher__button:active{border-color:var(--pst-color-border);color:var(--pst-color-text-base)}button.btn.version-switcher__button:focus-visible{border-color:transparent}.version-switcher__menu{border-color:var(--pst-color-border);border-radius:var(--bs-dropdown-border-radius)}.version-switcher__menu a.list-group-item{background-color:var(--pst-color-on-background);color:var(--pst-color-text-base);padding:.75rem 1.25rem}.version-switcher__menu a.list-group-item:not(:last-child){border-bottom:1px solid var(--pst-color-border)}.version-switcher__menu a.list-group-item:hover{background-color:var(--pst-color-surface);color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.version-switcher__menu a.list-group-item.active{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600;position:relative;z-index:1}.version-switcher__menu a.list-group-item.active:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}.version-switcher__menu a.list-group-item.active span:before{content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1}.version-switcher__menu a.list-group-item:focus-visible{z-index:10}.version-switcher__menu,button.version-switcher__button{box-sizing:border-box;font-size:1.1em;min-height:24px;min-width:24px;z-index:1055}@media (min-width:960px){.version-switcher__menu,button.version-switcher__button{font-size:unset}}nav.page-toc{margin-bottom:1rem}.bd-toc .nav .nav{display:none}.bd-toc .nav .nav.visible,.bd-toc .nav>.active>ul,.toc-entry{display:block}.toc-entry a.nav-link,.toc-entry a>code{color:var(--pst-color-text-muted)}.toc-entry a.nav-link{display:block;margin-left:-1rem;padding:.25rem 0 .25rem 1rem;text-decoration:none}.toc-entry a.nav-link:hover{background-color:transparent;text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}.toc-entry a.nav-link:active,.toc-entry a.nav-link:hover{color:var(--pst-color-link-hover)}.toc-entry a.nav-link:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:none;z-index:10}.toc-entry a.nav-link.active{background-color:transparent;box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600}.toc-entry a.nav-link.active:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}.toc-entry a.nav-link.active:hover{color:var(--pst-color-link-hover)}.toc-entry a.nav-link:focus-visible{border-radius:.125rem}div.deprecated,div.versionadded,div.versionchanged{background-color:var(--pst-color-on-background);border-left:.2rem solid;border-color:var(--pst-color-info);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;break-inside:avoid;margin:1.5625em auto;overflow:hidden;padding:0 .6rem;page-break-inside:avoid;position:relative;vertical-align:middle}div.deprecated>p,div.versionadded>p,div.versionchanged>p{margin-bottom:.6rem;margin-top:.6rem}div.versionadded{background-color:var(--pst-color-success-bg);border-color:var(--pst-color-success)}div.versionchanged{background-color:var(--pst-color-warning-bg);border-color:var(--pst-color-warning)}div.deprecated{background-color:var(--pst-color-danger-bg);border-color:var(--pst-color-danger)}span.versionmodified{font-weight:600}span.versionmodified:before{color:var(--pst-color-info);content:var(--pst-icon-versionmodified-default);font:var(--fa-font-solid);margin-right:.6rem}span.versionmodified.added:before{color:var(--pst-color-success);content:var(--pst-icon-versionmodified-added)}span.versionmodified.changed:before{color:var(--pst-color-warning);content:var(--pst-icon-versionmodified-changed)}span.versionmodified.deprecated:before{color:var(--pst-color-danger);content:var(--pst-icon-versionmodified-deprecated)}.sidebar-indices-items{border-top:1px solid var(--pst-color-border);display:flex;flex-direction:column}@media (min-width:960px){.sidebar-indices-items{border-top:none}}.sidebar-indices-items .sidebar-indices-items__title{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-header-font-size);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.sidebar-indices-items ul.indices-link{list-style:none;margin-right:-1rem;padding:0}.sidebar-indices-items ul.indices-link li>a{color:var(--pst-color-text-muted);display:block;padding:.25rem 0}.sidebar-indices-items ul.indices-link li>a:hover{background-color:transparent;color:var(--pst-color-primary);text-decoration:none}.bd-sidebar-primary div#rtd-footer-container{bottom:-1rem;margin:-1rem;position:sticky}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge{font-family:var(--pst-font-family-base);font-size:.9em;max-width:unset;position:unset}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .rst-current-version{align-items:center;background-color:var(--pst-color-background);border-top:1px solid var(--pst-color-border);color:var(--pst-color-success);display:flex;gap:.2rem;height:2.5rem;transition:background-color .2s ease-out}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-book{color:var(--pst-color-text-muted);margin-right:auto}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-book:after{color:var(--pst-color-text-base);content:"Read The Docs";font-family:var(--pst-font-family-base);font-weight:var(--pst-admonition-font-weight-heading)}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-caret-down{color:var(--pst-color-text-muted)}.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge.shift-up .rst-current-version{border-bottom:1px solid var(--pst-color-border)}.bd-sidebar-primary div#rtd-footer-container .rst-other-versions{background-color:var(--pst-color-surface);color:var(--pst-color-text-base)}.bd-sidebar-primary div#rtd-footer-container .rst-other-versions dl dd a{color:var(--pst-color-text-muted)}.bd-sidebar-primary div#rtd-footer-container .rst-other-versions hr{background-color:var(--pst-color-border)}.bd-sidebar-primary div#rtd-footer-container .rst-other-versions .small a,.bd-sidebar-primary div#rtd-footer-container .rst-other-versions small a{color:var(--pst-color-link)}.bd-sidebar-primary div#rtd-footer-container .rst-other-versions input{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);padding-left:.5rem}.admonition,div.admonition{background-color:var(--pst-color-on-background);border-left:.2rem solid;border-color:var(--pst-color-info);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;break-inside:avoid;margin:1.5625em auto;overflow:hidden;padding:0 .6rem .8rem;page-break-inside:avoid}.admonition :last-child,div.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*,div.admonition p.admonition-title~*{margin-left:1.4rem;margin-right:1.4rem}.admonition>ol,.admonition>ul,div.admonition>ol,div.admonition>ul{margin-left:1em}.admonition>.admonition-title,div.admonition>.admonition-title{background-color:var(--pst-color-info-bg);font-weight:var(--pst-admonition-font-weight-heading);margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;position:relative;z-index:1}.admonition>.admonition-title:before,div.admonition>.admonition-title:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.admonition>.admonition-title:after,div.admonition>.admonition-title:after{color:var(--pst-color-info);content:var(--pst-icon-admonition-default);font:var(--fa-font-solid);height:1rem;left:.5rem;line-height:inherit;opacity:1;position:absolute;width:1rem}.admonition>.admonition-title+*,div.admonition>.admonition-title+*{margin-top:.4em}.admonition.attention,div.admonition.attention{border-color:var(--pst-color-attention)}.admonition.attention>.admonition-title,div.admonition.attention>.admonition-title{background-color:var(--pst-color-attention-bg)}.admonition.attention>.admonition-title:after,div.admonition.attention>.admonition-title:after{color:var(--pst-color-attention);content:var(--pst-icon-admonition-attention)}.admonition.caution,div.admonition.caution{border-color:var(--pst-color-warning)}.admonition.caution>.admonition-title,div.admonition.caution>.admonition-title{background-color:var(--pst-color-warning-bg)}.admonition.caution>.admonition-title:after,div.admonition.caution>.admonition-title:after{color:var(--pst-color-warning);content:var(--pst-icon-admonition-caution)}.admonition.warning,div.admonition.warning{border-color:var(--pst-color-warning)}.admonition.warning>.admonition-title,div.admonition.warning>.admonition-title{background-color:var(--pst-color-warning-bg)}.admonition.warning>.admonition-title:after,div.admonition.warning>.admonition-title:after{color:var(--pst-color-warning);content:var(--pst-icon-admonition-warning)}.admonition.danger,div.admonition.danger{border-color:var(--pst-color-danger)}.admonition.danger>.admonition-title,div.admonition.danger>.admonition-title{background-color:var(--pst-color-danger-bg)}.admonition.danger>.admonition-title:after,div.admonition.danger>.admonition-title:after{color:var(--pst-color-danger);content:var(--pst-icon-admonition-danger)}.admonition.error,div.admonition.error{border-color:var(--pst-color-danger)}.admonition.error>.admonition-title,div.admonition.error>.admonition-title{background-color:var(--pst-color-danger-bg)}.admonition.error>.admonition-title:after,div.admonition.error>.admonition-title:after{color:var(--pst-color-danger);content:var(--pst-icon-admonition-error)}.admonition.hint,div.admonition.hint{border-color:var(--pst-color-success)}.admonition.hint>.admonition-title,div.admonition.hint>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.hint>.admonition-title:after,div.admonition.hint>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-hint)}.admonition.tip,div.admonition.tip{border-color:var(--pst-color-success)}.admonition.tip>.admonition-title,div.admonition.tip>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.tip>.admonition-title:after,div.admonition.tip>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-tip)}.admonition.important,div.admonition.important{border-color:var(--pst-color-attention)}.admonition.important>.admonition-title,div.admonition.important>.admonition-title{background-color:var(--pst-color-attention-bg)}.admonition.important>.admonition-title:after,div.admonition.important>.admonition-title:after{color:var(--pst-color-attention);content:var(--pst-icon-admonition-important)}.admonition.note,div.admonition.note{border-color:var(--pst-color-info)}.admonition.note>.admonition-title,div.admonition.note>.admonition-title{background-color:var(--pst-color-info-bg)}.admonition.note>.admonition-title:after,div.admonition.note>.admonition-title:after{color:var(--pst-color-info);content:var(--pst-icon-admonition-note)}.admonition.seealso,div.admonition.seealso{border-color:var(--pst-color-success)}.admonition.seealso>.admonition-title,div.admonition.seealso>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.seealso>.admonition-title:after,div.admonition.seealso>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-seealso)}.admonition.admonition-todo,div.admonition.admonition-todo{border-color:var(--pst-color-secondary)}.admonition.admonition-todo>.admonition-title,div.admonition.admonition-todo>.admonition-title{background-color:var(--pst-color-secondary-bg)}.admonition.admonition-todo>.admonition-title:after,div.admonition.admonition-todo>.admonition-title:after{color:var(--pst-color-secondary);content:var(--pst-icon-admonition-todo)}.admonition.sidebar,div.admonition.sidebar{border-width:0 0 0 .2rem;clear:both;float:right;margin-left:.5rem;margin-top:0;max-width:40%}.admonition.sidebar.attention,.admonition.sidebar.important,div.admonition.sidebar.attention,div.admonition.sidebar.important{border-color:var(--pst-color-attention)}.admonition.sidebar.caution,.admonition.sidebar.warning,div.admonition.sidebar.caution,div.admonition.sidebar.warning{border-color:var(--pst-color-warning)}.admonition.sidebar.danger,.admonition.sidebar.error,div.admonition.sidebar.danger,div.admonition.sidebar.error{border-color:var(--pst-color-danger)}.admonition.sidebar.hint,.admonition.sidebar.seealso,.admonition.sidebar.tip,div.admonition.sidebar.hint,div.admonition.sidebar.seealso,div.admonition.sidebar.tip{border-color:var(--pst-color-success)}.admonition.sidebar.note,.admonition.sidebar.todo,div.admonition.sidebar.note,div.admonition.sidebar.todo{border-color:var(--pst-color-info)}.admonition.sidebar p.admonition-title~*,div.admonition.sidebar p.admonition-title~*{margin-left:0;margin-right:0}aside.topic,div.topic,div.topic.contents,nav.contents{background-color:var(--pst-color-surface);border-color:var(--pst-color-border);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;display:flex;flex-direction:column;padding:1rem 1.25rem}aside.topic .topic-title,div.topic .topic-title,div.topic.contents .topic-title,nav.contents .topic-title{margin:0 0 .5rem}aside.topic p,div.topic p,div.topic.contents p,nav.contents p{color:var(--pst-color-on-surface)!important}aside.topic ul.simple,div.topic ul.simple,div.topic.contents ul.simple,nav.contents ul.simple{padding-left:1rem}aside.topic ul.simple ul,div.topic ul.simple ul,div.topic.contents ul.simple ul,nav.contents ul.simple ul{padding-left:2em}aside.sidebar{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;margin-left:.5rem;padding:0}aside.sidebar>:last-child{padding-bottom:1rem}aside.sidebar p.sidebar-title{border-bottom:1px solid var(--pst-color-border);font-family:var(--pst-font-family-heading);font-weight:var(--pst-admonition-font-weight-heading);margin-bottom:0;padding-bottom:.5rem;padding-top:.5rem;position:relative}aside.sidebar>:not(.sidebar-title):first-child,aside.sidebar>p.sidebar-title+*{margin-top:1rem}aside.sidebar>*{padding-left:1rem;padding-right:1rem}p.rubric{display:flex;flex-direction:column}.seealso dd{margin-bottom:0;margin-top:0}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list th.field-name{background-color:var(--pst-color-surface);padding:1px 8px 1px 5px;white-space:nowrap}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}.sig{font-family:var(--pst-font-family-monospace)}.sig-inline.c-texpr,.sig-inline.cpp-texpr{font-family:unset}.sig.c .k,.sig.c .kt,.sig.c .m,.sig.c .s,.sig.c .sc,.sig.cpp .k,.sig.cpp .kt,.sig.cpp .m,.sig.cpp .s,.sig.cpp .sc{color:var(--pst-color-text-base)}.sig-name{color:var(--pst-color-inline-code)}.sig-param .default_value,.sig-param .o{color:var(--pst-color-text-muted);font-weight:400}dt:target,span.highlighted{background-color:var(--pst-color-target)}.viewcode-back{font-family:var(--pst-font-family-base)}.viewcode-block:target{background-color:var(--pst-color-target);border-bottom:1px solid var(--pst-color-border);border-top:1px solid var(--pst-color-border);position:relative}dl>dt>a:has(.viewcode-link){float:right}dl>dt>a:has(.viewcode-link) .viewcode-link{float:none}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple){margin-bottom:3rem}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dd{margin-left:2rem}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dd>dl.simple>dt{display:flex}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dl.field-list{display:grid;grid-template-columns:unset}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dt.field-even,dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dt.field-odd{background-color:var(--pst-color-surface);margin-bottom:.1rem;margin-top:.2rem}div.highlight,div.literal-block-wrapper,div[class*=highlight-]{border-radius:.25rem;break-inside:avoid;display:flex;flex-direction:column;width:unset}div.literal-block-wrapper{border:1px solid var(--pst-color-border);border-radius:.25rem}div.literal-block-wrapper div.code-block-caption{border-bottom:1px solid var(--pst-color-border);font-size:1rem;font-weight:var(--pst-font-weight-caption);margin:0;padding:.5rem}div.literal-block-wrapper div.code-block-caption a.headerlink{font-size:inherit}div.literal-block-wrapper div[class*=highlight-]{border-radius:0;margin:0}div.literal-block-wrapper div[class*=highlight-] pre{border:none;box-shadow:none}code.literal{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;padding:.1rem .25rem}a>code{color:var(--pst-color-inline-code-links)}a>code:hover{color:var(--pst-color-link-hover)}span.linenos{opacity:.8!important}figure>a,figure>a>img,figure>img,figure>video{display:block;margin-left:auto;margin-right:auto}figure a.headerlink{font-size:inherit;position:absolute}figure:hover a.headerlink{visibility:visible}figure figcaption{color:var(--pst-color-text-muted);font-family:var(--pst-font-family-heading);font-weight:var(--pst-font-weight-caption);margin-left:auto;margin-right:auto;margin-top:.3rem;text-align:center}figure figcaption>p:last-child{margin-bottom:0}figure figcaption p{display:inline-block;text-align:start}figure figcaption table.table{margin-left:auto;margin-right:auto;width:fit-content}dt.label>span.brackets:not(:only-child):before{content:"["}dt.label>span.brackets:not(:only-child):after{content:"]"}a.footnote-reference{font-size:small;vertical-align:super}aside.footnote{margin-bottom:.5rem}aside.footnote:last-child{margin-bottom:1rem}aside.footnote span.backrefs,aside.footnote span.label{font-weight:700}aside.footnote:target{background-color:var(--pst-color-target)}div.doctest>div.highlight span.gp,span.linenos,table.highlighttable td.linenos{user-select:none}dd{margin-bottom:10px;margin-left:30px;margin-top:3px}ol,ul{padding-inline-start:2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}blockquote{background-color:var(--pst-color-surface);border-left:.25em solid var(--pst-color-blockquote-notch);border-radius:.25rem;color:var(--pst-color-text-muted);padding:1em;position:relative}blockquote p{color:var(--pst-color-text-base)}blockquote .line-block{margin:0}blockquote p:last-child{margin-bottom:0}blockquote:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}blockquote a{color:var(--pst-color-inline-code-links)}blockquote:before{z-index:-1}span.guilabel{background-color:var(--pst-color-info-bg);border:1px solid var(--pst-color-info);border-radius:4px;font-size:80%;font-weight:700;margin:auto 2px;padding:2.4px 6px;position:relative}span.guilabel:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}a.reference.download:before{color:var(--pst-color-text-muted);content:var(--pst-icon-download);font:var(--fa-font-solid);font-size:.8em;padding:0 .25em}table{margin-left:auto;margin-right:auto}table.table-right{margin-right:0}table.table-left{margin-left:0}table caption{caption-side:top;color:var(--pst-color-text-muted);text-align:center}td.text-left,th.text-left{text-align:left}td.text-right,th.text-right{text-align:right}td.text-center,th.text-center{text-align:center}.table{--bs-table-bg:transparent;--bs-table-color:var( + */:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(../vendor/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(../vendor/fontawesome/webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}html{--pst-header-height:4rem;--pst-header-article-height:calc(var(--pst-header-height)*2/3);--pst-sidebar-secondary:17rem;--pst-font-size-base:1rem;--pst-font-size-h1:2.625rem;--pst-font-size-h2:2.125rem;--pst-font-size-h3:1.75rem;--pst-font-size-h4:1.5rem;--pst-font-size-h5:1.25rem;--pst-font-size-h6:1rem;--pst-font-size-milli:0.9rem;--pst-sidebar-font-size:0.9rem;--pst-sidebar-font-size-mobile:1.1rem;--pst-sidebar-header-font-size:1.2rem;--pst-sidebar-header-font-weight:600;--pst-admonition-font-weight-heading:600;--pst-font-weight-caption:300;--pst-font-weight-heading:600;--pst-font-family-base-system:-apple-system,"BlinkMacSystemFont","Segoe UI","Helvetica Neue","Arial",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--pst-font-family-monospace-system:"SFMono-Regular","Menlo","Consolas","Monaco","Liberation Mono","Lucida Console",monospace;--pst-font-family-base:var(--pst-font-family-base-system);--pst-font-family-heading:var(--pst-font-family-base-system);--pst-font-family-monospace:var(--pst-font-family-monospace-system);--pst-font-size-icon:1.5rem;--pst-icon-check-circle:"";--pst-icon-info-circle:"";--pst-icon-exclamation-triangle:"";--pst-icon-exclamation-circle:"";--pst-icon-times-circle:"";--pst-icon-lightbulb:"";--pst-icon-download:"";--pst-icon-angle-left:"";--pst-icon-angle-right:"";--pst-icon-external-link:"";--pst-icon-search-minus:"";--pst-icon-github:"";--pst-icon-gitlab:"";--pst-icon-share:"";--pst-icon-bell:"";--pst-icon-pencil:"";--pst-breadcrumb-divider:"";--pst-icon-admonition-default:var(--pst-icon-bell);--pst-icon-admonition-note:var(--pst-icon-info-circle);--pst-icon-admonition-attention:var(--pst-icon-exclamation-circle);--pst-icon-admonition-caution:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-warning:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-danger:var(--pst-icon-exclamation-triangle);--pst-icon-admonition-error:var(--pst-icon-times-circle);--pst-icon-admonition-hint:var(--pst-icon-lightbulb);--pst-icon-admonition-tip:var(--pst-icon-lightbulb);--pst-icon-admonition-important:var(--pst-icon-exclamation-circle);--pst-icon-admonition-seealso:var(--pst-icon-share);--pst-icon-admonition-todo:var(--pst-icon-pencil);--pst-icon-versionmodified-default:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-added:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-changed:var(--pst-icon-exclamation-circle);--pst-icon-versionmodified-deprecated:var(--pst-icon-exclamation-circle);font-size:var(--pst-font-size-base);scroll-padding-top:calc(var(--pst-header-height) + 1rem)}body{background-color:var(--pst-color-background);color:var(--pst-color-text-base);display:flex;flex-direction:column;font-family:var(--pst-font-family-base);font-weight:400;line-height:1.65;min-height:100vh}body::-webkit-scrollbar-track{background-color:var(--pst-color-background)}p{font-size:1em;margin-bottom:1.15rem}p.rubric{border-bottom:1px solid var(--pst-color-border)}p.centered{text-align:center}a{word-wrap:break-word;color:var(--pst-color-link);text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}a:hover{color:var(--pst-color-link-hover);text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}a:active,a:visited{color:var(--pst-color-link)}a:visited:hover{color:var(--pst-color-link-hover)}a.headerlink{color:var(--pst-color-secondary);font-size:.8em;margin-left:.2em;padding:0 4px;text-decoration:none;user-select:none}a.github:before,a.gitlab:before{color:var(--pst-color-text-muted);font:var(--fa-font-brands);margin-right:.25rem}a.github:before{content:var(--pst-icon-github)}a.gitlab:before{content:var(--pst-icon-gitlab)}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:var(--pst-font-family-heading);font-weight:var(--pst-font-weight-heading);line-height:1.15;margin:2.75rem 0 1.05rem}.h1,h1{font-size:var(--pst-font-size-h1);margin-top:0}.h1,.h2,h1,h2{color:var(--pst-color-heading)}.h2,h2{font-size:var(--pst-font-size-h2)}.h3,h3{font-size:var(--pst-font-size-h3)}.h3,.h4,h3,h4{color:var(--pst-color-heading)}.h4,h4{font-size:var(--pst-font-size-h4)}.h5,h5{font-size:var(--pst-font-size-h5)}.h5,.h6,h5,h6{color:var(--pst-color-text-base)}.h6,h6{font-size:var(--pst-font-size-h6)}.small,.text_small,small{font-size:var(--pst-font-size-milli)}hr{border:0;border-top:1px solid var(--pst-color-border)}code,kbd,pre,samp{font-family:var(--pst-font-family-monospace)}kbd{background-color:var(--pst-color-on-background);color:var(--pst-color-text-muted)}kbd:not(.compound){border:1px solid var(--pst-color-border);box-shadow:1px 1px 1px var(--pst-color-shadow);margin:0 .1rem;padding:.1rem .4rem}code{color:var(--pst-color-inline-code)}pre{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;color:var(--pst-color-text-base);line-height:1.2em;margin:1.5em 0;padding:1rem}pre .linenos{opacity:.8;padding-right:10px}#pst-back-to-top{background-color:var(--pst-color-secondary);border:none;color:var(--pst-color-secondary-text);display:none;left:50vw;position:fixed;top:90vh;transform:translate(-50%);z-index:1080}#pst-back-to-top .fa-arrow-up{margin-inline-end:.5em}#pst-back-to-top:hover{background-color:var(--pst-color-secondary-highlight);color:var(--pst-color-link-hover);color:var(--pst-color-secondary-highlight-text);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}#pst-back-to-top:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem;outline-color:var(--pst-color-secondary);outline-offset:.1875rem}:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem}.skip-link{background-color:var(--pst-color-warning);border-bottom:1px solid var(--pst-color-border);left:0;padding:.5rem;position:fixed;right:0;text-align:center;top:0;transform:translateY(-100%);transition:transform .15s ease-in-out;z-index:1055}.skip-link:focus-within{transform:translateY(0)}.skip-link a{color:var(--pst-color-warning-text)!important}.skip-link a:focus-visible{outline-color:#14181e}.bd-container{display:flex;flex-grow:1;justify-content:center}.bd-container .bd-container__inner{display:flex}.bd-page-width{width:100%}@media (min-width:960px){.bd-page-width{max-width:88rem}}.pst-async-banner-revealer{height:0;overflow:hidden;transition:height .3s ease-in-out}@media (prefers-reduced-motion){.pst-async-banner-revealer{transition:none}}#bd-header-version-warning,.bd-header-announcement{align-items:center;display:flex;justify-content:center;min-height:3rem;padding:.5rem 12.5%;position:relative;text-align:center;width:100%}@media (max-width:959.98px){#bd-header-version-warning,.bd-header-announcement{padding:.5rem 2%}}#bd-header-version-warning p,.bd-header-announcement p{font-weight:700;margin:0}#bd-header-version-warning a,.bd-header-announcement a{color:var(--pst-color-inline-code-links)}#bd-header-version-warning .pst-button-link-to-stable-version,.bd-header-announcement .pst-button-link-to-stable-version{background-color:var(--pst-color-danger);border-color:var(--pst-color-danger);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;color:var(--pst-color-danger-text)}#bd-header-version-warning .pst-button-link-to-stable-version:hover,.bd-header-announcement .pst-button-link-to-stable-version:hover{background-color:var(--pst-color-danger-highlight);border-color:var(--pst-color-danger-highlight);color:var(--pst-color-link-hover);color:var(--pst-color-danger-highlight-text);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}#bd-header-version-warning .pst-button-link-to-stable-version:focus-visible,.bd-header-announcement .pst-button-link-to-stable-version:focus-visible{outline:.1875rem solid var(--pst-color-danger);outline-offset:.1875rem}.bd-header-announcement{background-color:var(--pst-color-secondary-bg)}#bd-header-version-warning{background-color:var(--pst-color-danger-bg)}.bd-main{display:flex;flex-direction:column;flex-grow:1;min-width:0}.bd-main .bd-content{display:flex;height:100%;justify-content:center}.bd-main .bd-content .bd-article-container{display:flex;flex-direction:column;justify-content:start;max-width:60em;overflow-x:auto;padding:1rem;width:100%}@media (min-width:1200px){.bd-main .bd-content .bd-article-container .bd-article{padding-left:2rem;padding-top:1.5rem}}.bd-footer{border-top:1px solid var(--pst-color-border);width:100%}.bd-footer .bd-footer__inner{display:flex;flex-grow:1;margin:auto;padding:1rem}.bd-footer .footer-items__center,.bd-footer .footer-items__end,.bd-footer .footer-items__start{display:flex;flex-direction:column;flex-grow:1;gap:.5rem;justify-content:center}.bd-footer .footer-items__center{text-align:center}.bd-footer .footer-items__end{text-align:end}.bd-footer .footer-item p{margin-bottom:0}.bd-footer-article{margin-top:auto}.bd-footer-article .footer-article-items{display:flex;flex-direction:column}.bd-footer-content .footer-content-items{display:flex;flex-direction:column;margin-top:auto}.bd-header{background-color:var(--pst-color-on-background)!important;box-shadow:0 .125rem .25rem 0 var(--pst-color-shadow);justify-content:center;max-width:100vw;padding:0;position:sticky;top:0;width:100%;z-index:1030}.bd-header .bd-header__inner{align-items:center;display:flex;height:fit-content;padding-left:1rem;padding-right:1rem}.bd-header :focus-visible{border-radius:.125rem}.bd-header .navbar-item{align-items:center;display:flex;height:var(--pst-header-height);max-height:var(--pst-header-height)}.bd-header .navbar-header-items{display:none;flex-shrink:1}@media (min-width:960px){.bd-header .navbar-header-items{display:inherit;flex-grow:1;padding:0 0 0 .5rem}}.bd-header .navbar-header-items__center,.bd-header .navbar-header-items__end,.bd-header .navbar-header-items__start{align-items:center;display:flex;flex-flow:wrap;row-gap:0}.bd-header .navbar-header-items__center,.bd-header .navbar-header-items__end{column-gap:1.12rem}.bd-header .navbar-header-items__start{flex-shrink:0;gap:.5rem;margin-right:auto}.bd-header .navbar-header-items__end{justify-content:end}.bd-header ul.navbar-nav{display:flex}@media (min-width:960px){.bd-header ul.navbar-nav{align-items:baseline}}.bd-header ul.navbar-nav>li.nav-item{margin-inline:2px}.bd-header ul.navbar-nav>li.nav-item>.nav-link{color:var(--pst-color-text-muted);padding-inline:6px;position:relative}.bd-header ul.navbar-nav>li.nav-item>.nav-link:before{background-color:transparent;content:"";display:block;inset:0;bottom:calc(max(3px, .1875rem, .12em)*-1);margin:max(3px,.1875rem,.12em) 0;position:absolute}.bd-header ul.navbar-nav>li.nav-item>.nav-link:hover{color:var(--pst-color-secondary);text-decoration:none}.bd-header ul.navbar-nav>li.nav-item>.nav-link:hover:before{border-bottom:max(3px,.1875rem,.12em) solid var(--pst-color-secondary)}.bd-header ul.navbar-nav>li.nav-item>.nav-link:focus-visible{box-shadow:none;outline:3px solid var(--pst-color-accent);outline-offset:.1875rem}.bd-header ul.navbar-nav>li.nav-item.current>.nav-link{color:var(--pst-color-primary)}.bd-header ul.navbar-nav>li.nav-item.current>.nav-link:before{border-bottom:3px solid var(--pst-color-primary)}.bd-header ul.navbar-nav>li.nav-item.dropdown{margin-inline:4px}.bd-header ul.navbar-nav>li.nav-item.dropdown button{padding-inline:8px}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle{border-radius:.125rem;color:var(--pst-color-text-muted)}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.bd-header ul.navbar-nav>li.nav-item.dropdown>.dropdown-toggle:hover{box-shadow:0 0 0 .1875rem var(--pst-color-link-hover);color:var(--pst-color-text-base);text-decoration:none}.bd-header ul.navbar-nav li a.nav-link.dropdown-item{color:var(--pst-color-text-muted);text-decoration:none}.bd-header ul.navbar-nav li a.nav-link.dropdown-item:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.bd-header ul.navbar-nav .dropdown button{border:none;display:unset}.bd-header ul.navbar-nav .dropdown button:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.bd-header ul.navbar-nav .dropdown .dropdown-menu{background-color:var(--pst-color-on-background);border:1px solid var(--pst-color-border);box-shadow:0 0 .3rem .1rem var(--pst-color-shadow);margin:.5rem 0;min-width:20rem;padding:.5rem 0;z-index:1070}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item{padding:.25rem 1.5rem}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus:not(:hover,:active){background-color:inherit}.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus-visible{z-index:10}.bd-header ul.navbar-nav .dropdown .dropdown-menu:not(.show){display:none}.bd-header button.sidebar-toggle{background-color:inherit;color:var(--pst-color-muted);font-size:var(--pst-font-size-icon);margin-bottom:0;padding:.5rem}.bd-header button.primary-toggle{margin-right:1rem}@media (min-width:960px){.bd-header button.primary-toggle{display:none}}.bd-header button.secondary-toggle{margin-left:1rem}@media (min-width:1200px){.bd-header button.secondary-toggle{display:none}}@media (min-width:960px){.navbar-center-items .navbar-item{display:inline-block}}.nav-link{transition:none}.nav-link:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.nav-link.nav-external:after{content:var(--pst-icon-external-link);font:var(--fa-font-solid);font-size:.75em;margin-left:.3em}.bd-navbar-elements li.nav-item i{font-size:.7rem;padding-left:2px;vertical-align:middle}.navbar-persistent--mobile{margin-left:auto}@media (min-width:960px){.navbar-persistent--mobile{display:none}}.navbar-persistent--container{display:none}@media (min-width:960px){.navbar-persistent--container{display:flex}}.header-article__inner{padding:0 .5rem}.header-article__inner .header-article-item{min-height:var(--pst-header-article-height)}.header-article__inner .header-article-items__end{margin-left:auto}.bd-sidebar-primary{background-color:var(--pst-color-background);border-right:1px solid var(--pst-color-border);display:flex;flex:0 0 auto;flex-direction:column;font-size:var(--pst-sidebar-font-size-mobile);gap:1rem;max-height:calc(100vh - var(--pst-header-height));overflow-y:auto;padding:2rem 1rem 1rem;position:sticky;top:var(--pst-header-height);width:25%}@media (min-width:960px){.bd-sidebar-primary{font-size:var(--pst-sidebar-font-size)}}.bd-sidebar-primary :focus-visible{border-radius:.125rem}.bd-sidebar-primary .nav-link{font-size:var(--pst-sidebar-font-size-mobile)}.bd-sidebar-primary.no-sidebar{border-right:0}@media (min-width:960px){.bd-sidebar-primary.hide-on-wide{display:none}}.bd-sidebar-primary .h1,.bd-sidebar-primary .h2,.bd-sidebar-primary .h3,.bd-sidebar-primary .h4,.bd-sidebar-primary h1,.bd-sidebar-primary h2,.bd-sidebar-primary h3,.bd-sidebar-primary h4{color:var(--pst-color-text-base)}.bd-sidebar-primary .sidebar-primary-items__end .sidebar-primary-item,.bd-sidebar-primary .sidebar-primary-items__start .sidebar-primary-item{padding:.5rem 0}.bd-sidebar-primary .sidebar-header-items{display:flex;flex-direction:column}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__title{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-header-font-size);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.bd-sidebar-primary .sidebar-header-items .bd-navbar-elements .nav-link:focus-visible{box-shadow:none;outline:var(--pst-color-accent) solid .1875rem;outline-offset:.1875rem}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__center{display:flex;flex-direction:column}.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__end{align-items:center;display:flex;gap:1rem}@media (min-width:960px){.bd-sidebar-primary .sidebar-header-items{display:none}}.bd-sidebar-primary .sidebar-primary-items__start{border-top:1px solid var(--pst-color-border)}@media (min-width:960px){.bd-sidebar-primary .sidebar-primary-items__start{border-top:none}}.bd-sidebar-primary .sidebar-primary-items__end{margin-bottom:1em;margin-top:auto}.bd-sidebar-primary .list-caption{list-style:none;padding-left:0}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary{align-items:baseline;display:flex;height:auto;justify-content:space-between;position:relative;width:auto}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary .toctree-toggle{flex:0 0 auto}.bd-sidebar-primary .list-caption li.toctree-l0.has-children>details>summary .toctree-toggle .fa-chevron-down{font-size:1rem}.bd-sidebar-primary li.has-children{position:relative}.bd-sidebar-primary li.has-children .caption,.bd-sidebar-primary li.has-children>.reference{margin-right:calc(30px + .1875rem);padding-top:.25rem}.bd-sidebar-primary li.has-children>details>summary{list-style:none}.bd-sidebar-primary li.has-children>details>summary::-webkit-details-marker{display:none}.bd-sidebar-primary li.has-children>details>summary:focus-visible{outline:none}.bd-sidebar-primary li.has-children>details>summary:focus-visible>.toctree-toggle{outline:var(--pst-color-accent) solid .1875rem;outline-offset:-.1875rem}.bd-sidebar-primary li.has-children>details>summary .toctree-toggle{align-items:center;cursor:pointer;display:inline-flex;height:30px;justify-content:center;position:absolute;right:0;top:0;width:30px}.bd-sidebar-primary li.has-children>details>summary .toctree-toggle .fa-chevron-down{font-size:.75rem}.bd-sidebar-primary li.has-children>details[open]>summary .fa-chevron-down{transform:rotate(180deg)}nav.bd-links{margin-right:-1rem}@media (min-width:960px){nav.bd-links{display:block}}nav.bd-links ul{display:block;list-style:none}nav.bd-links ul ul{padding:0 0 0 1rem}nav.bd-links li>a{box-shadow:none;color:var(--pst-color-text-muted);display:block;margin-right:.1875rem;padding:.25rem .65rem;text-decoration:none}nav.bd-links li>a:hover{background-color:transparent;text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}nav.bd-links li>a:active,nav.bd-links li>a:hover{color:var(--pst-color-link-hover)}nav.bd-links li>a:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:none;z-index:10}nav.bd-links li>a.reference.external:after{content:var(--pst-icon-external-link);font:var(--fa-font-solid);font-size:.75em;margin-left:.3em}nav.bd-links .current>a{background-color:transparent;box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600}nav.bd-links .current>a:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}nav.bd-links p.bd-links__title{font-size:var(--pst-sidebar-header-font-size)}nav.bd-links p.bd-links__title,nav.bd-links p.caption{font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}nav.bd-links p.caption{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-font-size-mobile);margin-top:1.25rem;position:relative}nav.bd-links p.caption:first-child{margin-top:0}@media (min-width:960px){nav.bd-links p.caption{font-size:var(--pst-sidebar-font-size)}}.bd-sidebar-secondary{background-color:var(--pst-color-background);display:flex;flex-direction:column;flex-shrink:0;font-size:var(--pst-sidebar-font-size-mobile);max-height:calc(100vh - var(--pst-header-height));order:2;overflow-y:auto;padding:2rem 1rem 1rem;position:sticky;top:var(--pst-header-height);width:var(--pst-sidebar-secondary)}@media (min-width:1200px){.bd-sidebar-secondary{font-size:var(--pst-sidebar-font-size)}}.sidebar-secondary-item{padding:.5rem}@media (min-width:1200px){.sidebar-secondary-item{border-left:1px solid var(--pst-color-border);padding-left:1rem}}.sidebar-secondary-item i{padding-right:.5rem}.bd-sidebar::backdrop{background-color:#000;opacity:.5}@media (max-width:959.98px){.bd-sidebar-primary{border:0;flex-grow:0.75;height:100vh;left:0;margin-left:-75%;max-height:100vh;max-width:350px;position:fixed;top:0;transition:visibility .2s ease-out,margin .2s ease-out;visibility:hidden;width:75%;z-index:1055}}.bd-sidebar-primary[open]{margin-left:0;visibility:visible}@media (max-width:1199.98px){.bd-sidebar-secondary{border:0;flex-grow:0.75;height:100vh;margin-right:-75%;max-height:100vh;max-width:350px;position:fixed;right:0;top:0;transition:visibility .2s ease-out,margin .2s ease-out;visibility:hidden;width:75%;z-index:1055}}.bd-sidebar-secondary[open]{margin-right:0;visibility:visible}ul.bd-breadcrumbs{display:flex;flex-wrap:wrap;font-size:.8rem;list-style:none;padding-left:0}ul.bd-breadcrumbs li.breadcrumb-item{align-items:center;display:flex;font-weight:700;overflow-x:hidden;white-space:nowrap}ul.bd-breadcrumbs li.breadcrumb-item .ellipsis,ul.bd-breadcrumbs li.breadcrumb-item a{margin:.1875rem;overflow-x:hidden;text-overflow:ellipsis}ul.bd-breadcrumbs li.breadcrumb-item a{color:var(--pst-color-text-muted);text-decoration:none}ul.bd-breadcrumbs li.breadcrumb-item a:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}ul.bd-breadcrumbs li.breadcrumb-item:not(.breadcrumb-home):before{color:var(--pst-color-text-muted);content:var(--pst-breadcrumb-divider);font:var(--fa-font-solid);font-size:.8rem;padding:0 .5rem}html .pst-navbar-icon{align-items:center;border:none;border-radius:0;box-sizing:border-box;color:var(--pst-color-text-muted);display:flex;font-size:1rem;height:2.15rem;justify-content:center;line-height:1.65;min-height:24px;min-width:24px;padding:.25rem 0;position:relative}html .pst-navbar-icon:before{background-color:transparent;content:"";display:block;inset:0;bottom:calc(max(3px, .1875rem, .12em)*-1);margin:max(3px,.1875rem,.12em) 0;position:absolute}html .pst-navbar-icon:hover{color:var(--pst-color-secondary);text-decoration:none}html .pst-navbar-icon:hover:before{border-bottom:max(3px,.1875rem,.12em) solid var(--pst-color-secondary)}html .pst-navbar-icon:focus-visible{box-shadow:none;outline:3px solid var(--pst-color-accent);outline-offset:.1875rem}ul.navbar-icon-links{align-items:center;column-gap:1.12rem;display:flex;flex-flow:row wrap;justify-content:space-evenly;list-style:none;margin-bottom:0;padding-left:0}ul.navbar-icon-links i.fa-brands,ul.navbar-icon-links i.fa-regular,ul.navbar-icon-links i.fa-solid{font-size:var(--pst-font-size-icon);font-style:normal;vertical-align:middle}ul.navbar-icon-links i.fa-square-twitter:before{color:#55acee}ul.navbar-icon-links i.fa-square-gitlab:before{color:#548}ul.navbar-icon-links i.fa-bitbucket:before{color:#0052cc}ul.navbar-icon-links img.icon-link-image{border-radius:.2rem;height:1.5em}ul.navbar-icon-links .fa-pydata{stroke:var(--pst-color-background);stroke-linejoin:round;stroke-width:.35}.navbar-brand{align-items:center;display:flex;flex-shrink:0;gap:.5rem;height:var(--pst-header-height);margin:0;max-height:var(--pst-header-height);padding:.5rem 0;position:relative;width:auto}.navbar-brand p{color:var(--pst-color-text-base);margin-bottom:0}.navbar-brand img{height:100%;max-width:100%;width:auto}.navbar-brand:hover,.navbar-brand:visited:hover{color:var(--pst-color-link-hover);color:var(--pst-color-text-base);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}ul.navbar-nav ul{padding:0 0 0 1rem}ul.navbar-nav li{display:flex;flex-direction:column}ul.navbar-nav li a{align-items:center;color:var(--pst-color-text-muted);display:flex;height:100%;padding-bottom:.25rem;padding-top:.25rem;text-decoration:none}ul.navbar-nav li a:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.page-toc .section-nav{border-bottom:none;padding-left:0}.page-toc .section-nav ul{padding-left:1rem}.page-toc .nav-link{font-size:var(--pst-sidebar-font-size-mobile)}@media (min-width:1200px){.page-toc .nav-link{font-size:var(--pst-sidebar-font-size)}}.page-toc .onthispage{color:var(--pst-color-text-base);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.prev-next-area{width:100%}.prev-next-area p{color:var(--pst-color-text-muted);line-height:1.3em;margin:0 .3em}.prev-next-area i{font-size:1.2em}.prev-next-area a{align-items:center;border:none;color:var(--pst-color-text-muted);display:flex;max-width:45%;overflow-x:hidden;padding:10px;text-decoration:none}.prev-next-area a p.prev-next-title{word-wrap:break-word;color:var(--pst-color-link);font-size:1.1em;font-weight:var(--pst-admonition-font-weight-heading);text-decoration:underline;text-decoration-thickness:max(1px,.0625rem);text-underline-offset:.1578em}.prev-next-area a p.prev-next-title:hover{color:var(--pst-color-link-hover);text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}.prev-next-area a p.prev-next-title:active,.prev-next-area a p.prev-next-title:visited{color:var(--pst-color-link)}.prev-next-area a p.prev-next-title:visited:hover{color:var(--pst-color-link-hover)}.prev-next-area a:hover p.prev-next-title,.prev-next-area a:visited:hover p.prev-next-title{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.prev-next-area a .prev-next-info{flex-direction:column;margin:0 .5em}.prev-next-area a .prev-next-info .prev-next-subtitle{text-transform:capitalize}.prev-next-area a.left-prev{float:left}.prev-next-area a.right-next{float:right}.prev-next-area a.right-next div.prev-next-info{text-align:right}.bd-search{border:1px solid var(--pst-color-border);border-radius:.25rem;color:var(--pst-color-text-base);gap:.5rem;padding-left:.5rem;position:relative}.bd-search,.bd-search:active{background-color:var(--pst-color-background)}.bd-search:active{color:var(--pst-color-text-muted)}.bd-search:focus-within{box-shadow:0 0 0 .1875rem var(--pst-color-accent)}.bd-search:focus-within input:focus{box-shadow:none}.bd-search .icon{color:var(--pst-color-border);left:25px;position:absolute}.bd-search .fa-solid.fa-magnifying-glass{color:var(--pst-color-text-muted);left:calc(1.25rem - .35em);position:absolute}.bd-search input.form-control{background-color:var(--pst-color-background);border:none;color:var(--pst-color-text-base)}.bd-search input.form-control::placeholder{color:var(--pst-color-text-muted)}.bd-search input.form-control::-webkit-search-cancel-button,.bd-search input.form-control::-webkit-search-decoration{appearance:none}.bd-search input.form-control:focus,.bd-search input.form-control:focus-visible{color:var(--pst-color-text-muted)}.bd-search .search-button__kbd-shortcut{color:var(--pst-color-border);display:none;margin-inline-end:.5rem}@media (min-width:720px){.bd-search .search-button__kbd-shortcut{display:flex}}.search-button i{font-size:1.3rem}#pst-search-dialog{display:none}#pst-search-dialog[open]{background-color:transparent;border:none;display:flex;left:50%;margin-top:.5rem;max-width:800px;padding:.1875rem;position:fixed;right:1rem;top:30%;transform:translate(-50%,-50%);width:90%;z-index:1055}#pst-search-dialog[open]::backdrop{background-color:#000;opacity:.5}#pst-search-dialog[open] form.bd-search{flex-grow:1}#pst-search-dialog[open] form.bd-search input,#pst-search-dialog[open] form.bd-search svg{font-size:var(--pst-font-size-icon)}.search-button-field{align-items:center;background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:1.5em;color:var(--pst-color-text-muted);display:inline-flex;padding:.5em}.search-button-field:hover{box-shadow:0 0 0 .1875rem var(--pst-color-link-hover)}.search-button-field:focus-visible{border-radius:1.5em}.search-button-field .search-button__default-text{font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);margin-left:.5em;margin-right:.5em}.search-button-field .kbd-shortcut__modifier{font-size:.75em}.search-button-field>*{align-items:center}.search-button-field>:not(svg){display:none}@media (min-width:960px){.search-button-field>:not(svg){display:flex}}div#searchbox p.highlight-link{box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;margin:1rem 0;width:fit-content}@media (min-width:1200px){div#searchbox p.highlight-link{margin-left:2rem}}div#searchbox p.highlight-link a{background-color:var(--pst-color-primary);border-radius:.25rem;color:var(--pst-color-primary-text);font-size:1.25rem;padding:.75rem;text-decoration:none;transition:box-shadow .25s ease-out}div#searchbox p.highlight-link a:hover{box-shadow:inset 0 0 50px 50px rgba(0,0,0,.25)}div#searchbox p.highlight-link a:before{color:unset;content:var(--pst-icon-search-minus);font:var(--fa-font-solid);margin-right:.5rem}.theme-switch-button .theme-switch{display:none}.theme-switch-button .theme-switch:active{color:var(--pst-color-link-hover);text-decoration:none}.theme-switch-button .theme-switch .fa-lg{aspect-ratio:1/1}html[data-mode=auto] .theme-switch-button .theme-switch[data-mode=auto],html[data-mode=dark] .theme-switch-button .theme-switch[data-mode=dark],html[data-mode=light] .theme-switch-button .theme-switch[data-mode=light]{display:inline}button.btn.version-switcher__button{border-color:var(--pst-color-border);color:var(--pst-color-text-base);margin-bottom:1em}@media (min-width:960px){button.btn.version-switcher__button{margin-bottom:unset}}button.btn.version-switcher__button:hover{border-color:transparent;box-shadow:0 0 0 .1875rem var(--pst-color-secondary)}button.btn.version-switcher__button:active{border-color:var(--pst-color-border);color:var(--pst-color-text-base)}button.btn.version-switcher__button:focus-visible{border-color:transparent}.version-switcher__menu{border-color:var(--pst-color-border);border-radius:var(--bs-dropdown-border-radius)}.version-switcher__menu a.list-group-item{background-color:var(--pst-color-on-background);color:var(--pst-color-text-base);padding:.75rem 1.25rem}.version-switcher__menu a.list-group-item:not(:last-child){border-bottom:1px solid var(--pst-color-border)}.version-switcher__menu a.list-group-item:hover{background-color:var(--pst-color-surface);color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-underline-offset:.1578em}.version-switcher__menu a.list-group-item.active{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600;position:relative;z-index:1}.version-switcher__menu a.list-group-item.active:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}.version-switcher__menu a.list-group-item.active span:before{content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1}.version-switcher__menu a.list-group-item:focus-visible{z-index:10}.version-switcher__menu,button.version-switcher__button{box-sizing:border-box;font-size:1.1em;min-height:24px;min-width:24px;z-index:1055}@media (min-width:960px){.version-switcher__menu,button.version-switcher__button{font-size:unset}}nav.page-toc{margin-bottom:1rem}.bd-toc .nav .nav{display:none}.bd-toc .nav .nav.visible,.bd-toc .nav>.active>ul,.toc-entry{display:block}.toc-entry a.nav-link,.toc-entry a>code{color:var(--pst-color-text-muted)}.toc-entry a.nav-link{display:block;margin-left:-1rem;padding:.25rem 0 .25rem 1rem;text-decoration:none}.toc-entry a.nav-link:hover{background-color:transparent;text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(3px,.1875rem,.12em)}.toc-entry a.nav-link:active,.toc-entry a.nav-link:hover{color:var(--pst-color-link-hover)}.toc-entry a.nav-link:focus-visible{box-shadow:0 0 0 .1875rem var(--pst-color-accent);outline:none;z-index:10}.toc-entry a.nav-link.active{background-color:transparent;box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary);color:var(--pst-color-primary);font-weight:600}.toc-entry a.nav-link.active:focus-visible{box-shadow:inset max(3px,.1875rem,.12em) 0 0 var(--pst-color-primary),0 0 0 .1875rem var(--pst-color-accent);outline:none}.toc-entry a.nav-link.active:hover{color:var(--pst-color-link-hover)}.toc-entry a.nav-link:focus-visible{border-radius:.125rem}div.deprecated,div.versionadded,div.versionchanged{background-color:var(--pst-color-on-background);border-left:.2rem solid;border-color:var(--pst-color-info);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;break-inside:avoid;margin:1.5625em auto;overflow:hidden;padding:0 .6rem;page-break-inside:avoid;position:relative;vertical-align:middle}div.deprecated>p,div.versionadded>p,div.versionchanged>p{margin-bottom:.6rem;margin-top:.6rem}div.versionadded{background-color:var(--pst-color-success-bg);border-color:var(--pst-color-success)}div.versionchanged{background-color:var(--pst-color-warning-bg);border-color:var(--pst-color-warning)}div.deprecated{background-color:var(--pst-color-danger-bg);border-color:var(--pst-color-danger)}span.versionmodified{font-weight:600}span.versionmodified:before{color:var(--pst-color-info);content:var(--pst-icon-versionmodified-default);font:var(--fa-font-solid);margin-right:.6rem}span.versionmodified.added:before{color:var(--pst-color-success);content:var(--pst-icon-versionmodified-added)}span.versionmodified.changed:before{color:var(--pst-color-warning);content:var(--pst-icon-versionmodified-changed)}span.versionmodified.deprecated:before{color:var(--pst-color-danger);content:var(--pst-icon-versionmodified-deprecated)}.sidebar-indices-items{border-top:1px solid var(--pst-color-border);display:flex;flex-direction:column}@media (min-width:960px){.sidebar-indices-items{border-top:none}}.sidebar-indices-items .sidebar-indices-items__title{color:var(--pst-color-text-base);font-size:var(--pst-sidebar-header-font-size);font-weight:var(--pst-sidebar-header-font-weight);margin-bottom:.5rem}.sidebar-indices-items ul.indices-link{list-style:none;margin-right:-1rem;padding:0}.sidebar-indices-items ul.indices-link li>a{color:var(--pst-color-text-muted);display:block;padding:.25rem 0}.sidebar-indices-items ul.indices-link li>a:hover{background-color:transparent;color:var(--pst-color-primary);text-decoration:none}.admonition,div.admonition{background-color:var(--pst-color-on-background);border-left:.2rem solid;border-color:var(--pst-color-info);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;break-inside:avoid;margin:1.5625em auto;overflow:hidden;padding:0 .6rem .8rem;page-break-inside:avoid}.admonition :last-child,div.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*,div.admonition p.admonition-title~*{margin-left:1.4rem;margin-right:1.4rem}.admonition>ol,.admonition>ul,div.admonition>ol,div.admonition>ul{margin-left:1em}.admonition>.admonition-title,div.admonition>.admonition-title{background-color:var(--pst-color-info-bg);font-weight:var(--pst-admonition-font-weight-heading);margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;position:relative;z-index:1}.admonition>.admonition-title:before,div.admonition>.admonition-title:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}.admonition>.admonition-title:after,div.admonition>.admonition-title:after{color:var(--pst-color-info);content:var(--pst-icon-admonition-default);font:var(--fa-font-solid);height:1rem;left:.5rem;line-height:inherit;opacity:1;position:absolute;width:1rem}.admonition>.admonition-title+*,div.admonition>.admonition-title+*{margin-top:.4em}.admonition.attention,div.admonition.attention{border-color:var(--pst-color-attention)}.admonition.attention>.admonition-title,div.admonition.attention>.admonition-title{background-color:var(--pst-color-attention-bg)}.admonition.attention>.admonition-title:after,div.admonition.attention>.admonition-title:after{color:var(--pst-color-attention);content:var(--pst-icon-admonition-attention)}.admonition.caution,div.admonition.caution{border-color:var(--pst-color-warning)}.admonition.caution>.admonition-title,div.admonition.caution>.admonition-title{background-color:var(--pst-color-warning-bg)}.admonition.caution>.admonition-title:after,div.admonition.caution>.admonition-title:after{color:var(--pst-color-warning);content:var(--pst-icon-admonition-caution)}.admonition.warning,div.admonition.warning{border-color:var(--pst-color-warning)}.admonition.warning>.admonition-title,div.admonition.warning>.admonition-title{background-color:var(--pst-color-warning-bg)}.admonition.warning>.admonition-title:after,div.admonition.warning>.admonition-title:after{color:var(--pst-color-warning);content:var(--pst-icon-admonition-warning)}.admonition.danger,div.admonition.danger{border-color:var(--pst-color-danger)}.admonition.danger>.admonition-title,div.admonition.danger>.admonition-title{background-color:var(--pst-color-danger-bg)}.admonition.danger>.admonition-title:after,div.admonition.danger>.admonition-title:after{color:var(--pst-color-danger);content:var(--pst-icon-admonition-danger)}.admonition.error,div.admonition.error{border-color:var(--pst-color-danger)}.admonition.error>.admonition-title,div.admonition.error>.admonition-title{background-color:var(--pst-color-danger-bg)}.admonition.error>.admonition-title:after,div.admonition.error>.admonition-title:after{color:var(--pst-color-danger);content:var(--pst-icon-admonition-error)}.admonition.hint,div.admonition.hint{border-color:var(--pst-color-success)}.admonition.hint>.admonition-title,div.admonition.hint>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.hint>.admonition-title:after,div.admonition.hint>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-hint)}.admonition.tip,div.admonition.tip{border-color:var(--pst-color-success)}.admonition.tip>.admonition-title,div.admonition.tip>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.tip>.admonition-title:after,div.admonition.tip>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-tip)}.admonition.important,div.admonition.important{border-color:var(--pst-color-attention)}.admonition.important>.admonition-title,div.admonition.important>.admonition-title{background-color:var(--pst-color-attention-bg)}.admonition.important>.admonition-title:after,div.admonition.important>.admonition-title:after{color:var(--pst-color-attention);content:var(--pst-icon-admonition-important)}.admonition.note,div.admonition.note{border-color:var(--pst-color-info)}.admonition.note>.admonition-title,div.admonition.note>.admonition-title{background-color:var(--pst-color-info-bg)}.admonition.note>.admonition-title:after,div.admonition.note>.admonition-title:after{color:var(--pst-color-info);content:var(--pst-icon-admonition-note)}.admonition.seealso,div.admonition.seealso{border-color:var(--pst-color-success)}.admonition.seealso>.admonition-title,div.admonition.seealso>.admonition-title{background-color:var(--pst-color-success-bg)}.admonition.seealso>.admonition-title:after,div.admonition.seealso>.admonition-title:after{color:var(--pst-color-success);content:var(--pst-icon-admonition-seealso)}.admonition.admonition-todo,div.admonition.admonition-todo{border-color:var(--pst-color-secondary)}.admonition.admonition-todo>.admonition-title,div.admonition.admonition-todo>.admonition-title{background-color:var(--pst-color-secondary-bg)}.admonition.admonition-todo>.admonition-title:after,div.admonition.admonition-todo>.admonition-title:after{color:var(--pst-color-secondary);content:var(--pst-icon-admonition-todo)}.admonition.sidebar,div.admonition.sidebar{border-width:0 0 0 .2rem;clear:both;float:right;margin-left:.5rem;margin-top:0;max-width:40%}.admonition.sidebar.attention,.admonition.sidebar.important,div.admonition.sidebar.attention,div.admonition.sidebar.important{border-color:var(--pst-color-attention)}.admonition.sidebar.caution,.admonition.sidebar.warning,div.admonition.sidebar.caution,div.admonition.sidebar.warning{border-color:var(--pst-color-warning)}.admonition.sidebar.danger,.admonition.sidebar.error,div.admonition.sidebar.danger,div.admonition.sidebar.error{border-color:var(--pst-color-danger)}.admonition.sidebar.hint,.admonition.sidebar.seealso,.admonition.sidebar.tip,div.admonition.sidebar.hint,div.admonition.sidebar.seealso,div.admonition.sidebar.tip{border-color:var(--pst-color-success)}.admonition.sidebar.note,.admonition.sidebar.todo,div.admonition.sidebar.note,div.admonition.sidebar.todo{border-color:var(--pst-color-info)}.admonition.sidebar p.admonition-title~*,div.admonition.sidebar p.admonition-title~*{margin-left:0;margin-right:0}aside.topic,div.topic,div.topic.contents,nav.contents{background-color:var(--pst-color-surface);border-color:var(--pst-color-border);border-radius:.25rem;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important;display:flex;flex-direction:column;padding:1rem 1.25rem}aside.topic .topic-title,div.topic .topic-title,div.topic.contents .topic-title,nav.contents .topic-title{margin:0 0 .5rem}aside.topic p,div.topic p,div.topic.contents p,nav.contents p{color:var(--pst-color-on-surface)!important}aside.topic ul.simple,div.topic ul.simple,div.topic.contents ul.simple,nav.contents ul.simple{padding-left:1rem}aside.topic ul.simple ul,div.topic ul.simple ul,div.topic.contents ul.simple ul,nav.contents ul.simple ul{padding-left:2em}aside.sidebar{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;margin-left:.5rem;padding:0}aside.sidebar>:last-child{padding-bottom:1rem}aside.sidebar p.sidebar-title{border-bottom:1px solid var(--pst-color-border);font-family:var(--pst-font-family-heading);font-weight:var(--pst-admonition-font-weight-heading);margin-bottom:0;padding-bottom:.5rem;padding-top:.5rem;position:relative}aside.sidebar>:not(.sidebar-title):first-child,aside.sidebar>p.sidebar-title+*{margin-top:1rem}aside.sidebar>*{padding-left:1rem;padding-right:1rem}p.rubric{display:flex;flex-direction:column}.seealso dd{margin-bottom:0;margin-top:0}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list th.field-name{background-color:var(--pst-color-surface);padding:1px 8px 1px 5px;white-space:nowrap}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}.sig{font-family:var(--pst-font-family-monospace)}.sig-inline.c-texpr,.sig-inline.cpp-texpr{font-family:unset}.sig.c .k,.sig.c .kt,.sig.c .m,.sig.c .s,.sig.c .sc,.sig.cpp .k,.sig.cpp .kt,.sig.cpp .m,.sig.cpp .s,.sig.cpp .sc{color:var(--pst-color-text-base)}.sig-name{color:var(--pst-color-inline-code)}.sig-param .default_value,.sig-param .o{color:var(--pst-color-text-muted);font-weight:400}dt:target,span.highlighted{background-color:var(--pst-color-target)}.viewcode-back{font-family:var(--pst-font-family-base)}.viewcode-block:target{background-color:var(--pst-color-target);border-bottom:1px solid var(--pst-color-border);border-top:1px solid var(--pst-color-border);position:relative}dl>dt>a:has(.viewcode-link){float:right}dl>dt>a:has(.viewcode-link) .viewcode-link{float:none}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple){margin-bottom:3rem}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dd{margin-left:2rem}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dd>dl.simple>dt{display:flex}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dl.field-list{display:grid;grid-template-columns:unset}dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dt.field-even,dl[class]:not(.option-list,.field-list,.footnote,.glossary,.simple) dt.field-odd{background-color:var(--pst-color-surface);margin-bottom:.1rem;margin-top:.2rem}div.highlight,div.literal-block-wrapper,div[class*=highlight-]{border-radius:.25rem;break-inside:avoid;display:flex;flex-direction:column;width:unset}div.literal-block-wrapper{border:1px solid var(--pst-color-border);border-radius:.25rem}div.literal-block-wrapper div.code-block-caption{border-bottom:1px solid var(--pst-color-border);font-size:1rem;font-weight:var(--pst-font-weight-caption);margin:0;padding:.5rem}div.literal-block-wrapper div.code-block-caption a.headerlink{font-size:inherit}div.literal-block-wrapper div[class*=highlight-]{border-radius:0;margin:0}div.literal-block-wrapper div[class*=highlight-] pre{border:none;box-shadow:none}code.literal{background-color:var(--pst-color-surface);border:1px solid var(--pst-color-border);border-radius:.25rem;padding:.1rem .25rem}a>code{color:var(--pst-color-inline-code-links)}a>code:hover{color:var(--pst-color-link-hover)}span.linenos{opacity:.8!important}figure>a,figure>a>img,figure>img,figure>video{display:block;margin-left:auto;margin-right:auto}figure a.headerlink{font-size:inherit;position:absolute}figure:hover a.headerlink{visibility:visible}figure figcaption{color:var(--pst-color-text-muted);font-family:var(--pst-font-family-heading);font-weight:var(--pst-font-weight-caption);margin-left:auto;margin-right:auto;margin-top:.3rem;text-align:center}figure figcaption>p:last-child{margin-bottom:0}figure figcaption p{display:inline-block;text-align:start}figure figcaption table.table{margin-left:auto;margin-right:auto;width:fit-content}dt.label>span.brackets:not(:only-child):before{content:"["}dt.label>span.brackets:not(:only-child):after{content:"]"}a.footnote-reference{font-size:small;vertical-align:super}aside.footnote{margin-bottom:.5rem}aside.footnote:last-child{margin-bottom:1rem}aside.footnote span.backrefs,aside.footnote span.label{font-weight:700}aside.footnote:target{background-color:var(--pst-color-target)}div.doctest>div.highlight span.gp,span.linenos,table.highlighttable td.linenos{user-select:none}dd{margin-bottom:10px;margin-left:30px;margin-top:3px}ol,ul{padding-inline-start:2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}blockquote{background-color:var(--pst-color-surface);border-left:.25em solid var(--pst-color-blockquote-notch);border-radius:.25rem;color:var(--pst-color-text-muted);padding:1em;position:relative}blockquote p{color:var(--pst-color-text-base)}blockquote .line-block{margin:0}blockquote p:last-child{margin-bottom:0}blockquote:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}blockquote a{color:var(--pst-color-inline-code-links)}blockquote:before{z-index:-1}span.guilabel{background-color:var(--pst-color-info-bg);border:1px solid var(--pst-color-info);border-radius:4px;font-size:80%;font-weight:700;margin:auto 2px;padding:2.4px 6px;position:relative}span.guilabel:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}a.reference.download:before{color:var(--pst-color-text-muted);content:var(--pst-icon-download);font:var(--fa-font-solid);font-size:.8em;padding:0 .25em}table{margin-left:auto;margin-right:auto}table.table-right{margin-right:0}table.table-left{margin-left:0}table caption{caption-side:top;color:var(--pst-color-text-muted);text-align:center}td.text-left,th.text-left{text-align:left}td.text-right,th.text-right{text-align:right}td.text-center,th.text-center{text-align:center}.table{--bs-table-bg:transparent;--bs-table-color:var( --pst-color-text-base - );border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.table td~td,.table td~th,.table th~td,.table th~th{border-left:1px solid var(--pst-color-table-inner-border)}.table thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.table tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.table tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.table tbody tr:hover{background-color:var(--pst-color-table-row-hover-bg)}.pst-scrollable-table-container{overflow-x:auto}.toctree-wrapper p.caption{font-size:1.5em;margin-bottom:0}.toctree-wrapper>ul{padding-left:0}.toctree-wrapper li[class^=toctree-l]{list-style:none;margin-bottom:.2em}.toctree-wrapper li[class^=toctree-l]>a{font-size:1.1em;list-style:none}.toctree-wrapper li[class^=toctree-l]>ul{list-style:none;padding-inline-start:1.5em}.toctree-wrapper .toctree-l1>a{font-size:1.3em}div.topic.contents ul.simple,nav.contents ul.simple{list-style:none;padding-left:0}div.math,span.math{align-items:center;display:flex;max-width:100%;overflow:hidden}span.math{display:inline-flex}div.math{flex-direction:row-reverse;gap:.5em}div.math span.eqno a.headerlink{font-size:1em;position:relative}div.math mjx-container{flex-grow:1;overflow:auto;padding-bottom:.2rem}div.math mjx-container mjx-assistive-mml{height:0}.ablog-sidebar-item .h2,.ablog-sidebar-item .h3,.ablog-sidebar-item h2,.ablog-sidebar-item h3{font-size:var(--pst-sidebar-header-font-size);margin-top:.5rem}.ablog-sidebar-item .h2 a,.ablog-sidebar-item .h3 a,.ablog-sidebar-item h2 a,.ablog-sidebar-item h3 a{color:var(--pst-color-text-base)}.ablog-sidebar-item ul{display:flex;flex-direction:column;gap:.5em;list-style:none;margin-bottom:0;overflow-y:hidden;padding-left:0}.ablog-sidebar-item ul.ablog-cloud{flex-flow:row wrap;gap:.5rem}.ablog-sidebar-item ul.ablog-cloud li{align-items:center;display:flex}.ablog__prev-next{display:flex;font-size:1.2em;padding:1rem 0}.ablog__prev-next>span{display:flex;max-width:45%}.ablog__prev-next>span a{align-items:center;display:flex;gap:1rem;line-height:1.5rem;margin-left:auto}.ablog__prev-next>span a i:before{color:var(--pst-color-text-base)}.ablog__prev-next span.ablog__prev i.fa-arrow-circle-left:before{content:var(--pst-icon-angle-left)}.ablog__prev-next span.ablog__spacer{display:none}.ablog__prev-next span.ablog__next{margin-left:auto;text-align:right}.ablog__prev-next span.ablog__next i.fa-arrow-circle-right:before{content:var(--pst-icon-angle-right)}.ablog__collection,.postlist{padding-left:0}.ablog__collection .ablog-post,.postlist .ablog-post{list-style:none}.ablog__collection .ablog-post .ablog-archive,.postlist .ablog-post .ablog-archive{display:flex;flex-flow:row wrap;font-size:.75rem;gap:1rem;list-style:none;padding-left:0}.ablog__collection .ablog-post .ablog-post-title,.postlist .ablog-post .ablog-post-title{font-size:1.25rem;margin-top:0}.ablog__collection .ablog-post .ablog-post-title a,.postlist .ablog-post .ablog-post-title a{font-weight:700}.ablog__collection .ablog-post .ablog-post-expand,.postlist .ablog-post .ablog-post-expand{margin-bottom:.5rem}.docutils.container{margin-left:unset;margin-right:unset;max-width:unset;padding-left:unset;padding-right:unset;width:unset}.btn{--bs-btn-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent)}div.highlight button.copybtn{align-items:center;background-color:var(--pst-color-surface);border:none;display:flex;justify-content:center}div.highlight button.copybtn:not(.success){color:var(--pst-color-muted)}div.highlight button.copybtn:hover:not(.success){background-color:var(--pst-color-shadow);color:var(--pst-color-text)}div.highlight button.copybtn.o-tooltip--left:after{background-color:var(--pst-color-surface);color:var(--pst-color-text)}div.highlight button.copybtn:focus{opacity:1}div.highlight button.copybtn:focus-visible{outline:var(--pst-color-accent) solid .1875rem}div.highlight:has(button.copybtn){min-height:2em}#ethical-ad-placement .ethical-footer a,#ethical-ad-placement .ethical-footer a:active,#ethical-ad-placement .ethical-footer a:hover,#ethical-ad-placement .ethical-footer a:visited,#ethical-ad-placement .ethical-sidebar a,#ethical-ad-placement .ethical-sidebar a:active,#ethical-ad-placement .ethical-sidebar a:hover,#ethical-ad-placement .ethical-sidebar a:visited{color:var(--pst-color-text-base)}#ethical-ad-placement .ethical-footer,#ethical-ad-placement .ethical-sidebar{background-color:var(--pst-color-background);border:1px solid var(--pst-color-border);border-radius:5px;color:var(--pst-color-text-base);font-size:14px;line-height:20px}.bd-content div.jupyter_container{background-color:unset;border:none;box-shadow:none}.bd-content div.jupyter_container div.highlight,.bd-content div.jupyter_container div.output{border-radius:.25rem}.bd-content div.jupyter_container div.highlight{background-color:var(--pst-color-surface)}.bd-content div.jupyter_container .cell_input,.bd-content div.jupyter_container .cell_output{border-radius:.25rem}.bd-content div.jupyter_container .cell_input pre,.bd-content div.jupyter_container .cell_output pre{padding:1rem}html[data-theme=dark] div.graphviz>object.inheritance{color-scheme:normal;filter:brightness(.8) invert(.82) contrast(1.2)}.xr-wrap[hidden]{display:block!important}.jp-OutputArea-output.lm-Widget{overflow:auto}:root{--pst-teal-50:#f4fbfc;--pst-teal-100:#e9f6f8;--pst-teal-200:#d0ecf1;--pst-teal-300:#abdde6;--pst-teal-400:#3fb1c5;--pst-teal-500:#0a7d91;--pst-teal-600:#085d6c;--pst-teal-700:#064752;--pst-teal-800:#042c33;--pst-teal-900:#021b1f;--pst-violet-50:#f4eefb;--pst-violet-100:#e0c7ff;--pst-violet-200:#d5b4fd;--pst-violet-300:#b780ff;--pst-violet-400:#9c5ffd;--pst-violet-500:#8045e5;--pst-violet-600:#6432bd;--pst-violet-700:#4b258f;--pst-violet-800:#341a61;--pst-violet-900:#1e0e39;--pst-gray-50:#f9f9fa;--pst-gray-100:#f3f4f5;--pst-gray-200:#e5e7ea;--pst-gray-300:#d1d5da;--pst-gray-400:#9ca4af;--pst-gray-500:#677384;--pst-gray-600:#48566b;--pst-gray-700:#29313d;--pst-gray-800:#222832;--pst-gray-900:#14181e;--pst-pink-50:#fcf8fd;--pst-pink-100:#fcf0fa;--pst-pink-200:#f8dff5;--pst-pink-300:#f3c7ee;--pst-pink-400:#e47fd7;--pst-pink-500:#c132af;--pst-pink-600:#912583;--pst-pink-700:#6e1c64;--pst-pink-800:#46123f;--pst-pink-900:#2b0b27;--pst-foundation-white:#fff;--pst-foundation-black:#14181e}html:not([data-theme]){--pst-color-primary:#0a7d91;--pst-color-primary-bg:#d0ecf1;--pst-color-secondary:#8045e5;--pst-color-secondary-bg:#e0c7ff;--pst-color-accent:#c132af;--pst-color-accent-bg:#f8dff5;--pst-color-info:#276be9;--pst-color-info-bg:#dce7fc;--pst-color-warning:#f66a0a;--pst-color-warning-bg:#f8e3d0;--pst-color-success:#00843f;--pst-color-success-bg:#d6ece1;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger:#d72d47;--pst-color-danger-bg:#f9e1e4;--pst-color-text-base:#222832;--pst-color-text-muted:#48566b;--pst-color-heading-color:#fff;--pst-color-shadow:rgba(0,0,0,.1);--pst-color-border:#d1d5da;--pst-color-border-muted:rgba(23,23,26,.2);--pst-color-blockquote-notch:#677384;--pst-color-inline-code:#912583;--pst-color-inline-code-links:#085d6c;--pst-color-target:#f3cf95;--pst-color-table:#14181e;--pst-color-table-row-hover-bg:#b780ff;--pst-color-table-inner-border:#e5e7ea;--pst-color-background:#fff;--pst-color-on-background:#fff;--pst-color-surface:#f3f4f5;--pst-color-on-surface:#222832;--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface)}html:not([data-theme]) .only-dark,html:not([data-theme]) .only-dark~figcaption{display:none!important}html[data-theme=light]{--pst-color-primary-bg:#d0ecf1;--pst-color-secondary-bg:#e0c7ff;--pst-color-accent:#c132af;--pst-color-accent-bg:#f8dff5;--pst-color-info-bg:#dce7fc;--pst-color-warning-bg:#f8e3d0;--pst-color-success-bg:#d6ece1;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger-bg:#f9e1e4;--pst-color-text-base:#222832;--pst-color-text-muted:#48566b;--pst-color-heading-color:#fff;--pst-color-shadow:rgba(0,0,0,.1);--pst-color-border:#d1d5da;--pst-color-border-muted:rgba(23,23,26,.2);--pst-color-blockquote-notch:#677384;--pst-color-inline-code:#912583;--pst-color-inline-code-links:#085d6c;--pst-color-target:#f3cf95;--pst-color-table:#14181e;--pst-color-table-row-hover-bg:#b780ff;--pst-color-table-inner-border:#e5e7ea;--pst-color-background:#fff;--pst-color-on-background:#fff;--pst-color-surface:#f3f4f5;--pst-color-on-surface:#222832;--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface);color-scheme:light}html[data-theme=light] .only-dark,html[data-theme=light] .only-dark~figcaption{display:none!important}html[data-theme=dark]{--pst-color-primary-bg:#042c33;--pst-color-secondary-bg:#341a61;--pst-color-accent:#e47fd7;--pst-color-accent-bg:#46123f;--pst-color-info-bg:#06245d;--pst-color-warning-bg:#652a02;--pst-color-success-bg:#002f17;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger-bg:#4e111b;--pst-color-text-base:#ced6dd;--pst-color-text-muted:#9ca4af;--pst-color-heading-color:#14181e;--pst-color-shadow:rgba(0,0,0,.2);--pst-color-border:#48566b;--pst-color-border-muted:#29313d;--pst-color-blockquote-notch:#9ca4af;--pst-color-inline-code:#f3c7ee;--pst-color-inline-code-links:#3fb1c5;--pst-color-target:#675c04;--pst-color-table:#fff;--pst-color-table-row-hover-bg:#6432bd;--pst-color-table-inner-border:#364150;--pst-color-background:#14181e;--pst-color-on-background:#222832;--pst-color-surface:#29313d;--pst-color-on-surface:#f3f4f5;--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface);color-scheme:dark}html[data-theme=dark] .only-light,html[data-theme=dark] .only-light~figcaption{display:none!important}html[data-theme=dark] img:not(.only-dark,.dark-light){filter:brightness(.8) contrast(1.2)}html[data-theme=dark] .bd-content img:not(.only-dark,.dark-light){background-color:#fff;border-radius:.25rem}html[data-theme=dark] .MathJax_SVG *{fill:var(--pst-color-text-base)}.pst-color-primary{color:var(--pst-color-primary)}.pst-color-secondary{color:var(--pst-color-secondary)}.pst-color-accent{color:var(--pst-color-accent)}.pst-color-info{color:var(--pst-color-info)}.pst-color-warning{color:var(--pst-color-warning)}.pst-color-success{color:var(--pst-color-success)}.pst-color-attention{color:var(--pst-color-attention)}.pst-color-danger{color:var(--pst-color-danger)}.pst-color-text-base{color:var(--pst-color-text-base)}.pst-color-text-muted{color:var(--pst-color-text-muted)}.pst-color-heading-color{color:var(--pst-color-heading-color)}.pst-color-shadow{color:var(--pst-color-shadow)}.pst-color-border{color:var(--pst-color-border)}.pst-color-border-muted{color:var(--pst-color-border-muted)}.pst-color-blockquote-notch{color:var(--pst-color-blockquote-notch)}.pst-color-inline-code{color:var(--pst-color-inline-code)}.pst-color-inline-code-links{color:var(--pst-color-inline-code-links)}.pst-color-target{color:var(--pst-color-target)}.pst-color-table{color:var(--pst-color-table)}.pst-color-table-row-hover{color:var(--pst-color-table-row-hover)}.pst-color-table-inner-border{color:var(--pst-color-table-inner-border)}.pst-color-background{color:var(--pst-color-background)}.pst-color-on-background{color:var(--pst-color-on-background)}.pst-color-surface{color:var(--pst-color-surface)}.pst-color-on-surface{color:var(--pst-color-on-surface)}html[data-theme=light]{--pst-color-primary:#0a7d91;--pst-color-primary-text:#fff;--pst-color-primary-highlight:#086b7c;--sd-color-primary:var(--pst-color-primary);--sd-color-primary-text:var(--pst-color-primary-text);--sd-color-primary-highlight:var(--pst-color-primary-highlight);--pst-color-primary-highlight-text:#fff;--sd-color-primary-bg:#d0ecf1;--sd-color-primary-bg-text:#14181e;--pst-color-secondary:#8045e5;--pst-color-secondary-text:#fff;--pst-color-secondary-highlight:#651ee0;--sd-color-secondary:var(--pst-color-secondary);--sd-color-secondary-text:var(--pst-color-secondary-text);--sd-color-secondary-highlight:var(--pst-color-secondary-highlight);--pst-color-secondary-highlight-text:#fff;--sd-color-secondary-bg:#e0c7ff;--sd-color-secondary-bg-text:#14181e;--pst-color-success:#00843f;--pst-color-success-text:#fff;--pst-color-success-highlight:#007036;--sd-color-success:var(--pst-color-success);--sd-color-success-text:var(--pst-color-success-text);--sd-color-success-highlight:var(--pst-color-success-highlight);--pst-color-success-highlight-text:#fff;--sd-color-success-bg:#d6ece1;--sd-color-success-bg-text:#14181e;--pst-color-info:#276be9;--pst-color-info-text:#fff;--pst-color-info-highlight:#1457d3;--sd-color-info:var(--pst-color-info);--sd-color-info-text:var(--pst-color-info-text);--sd-color-info-highlight:var(--pst-color-info-highlight);--pst-color-info-highlight-text:#fff;--sd-color-info-bg:#dce7fc;--sd-color-info-bg-text:#14181e;--pst-color-warning:#f66a0a;--pst-color-warning-text:#14181e;--pst-color-warning-highlight:#d25a07;--sd-color-warning:var(--pst-color-warning);--sd-color-warning-text:var(--pst-color-warning-text);--sd-color-warning-highlight:var(--pst-color-warning-highlight);--pst-color-warning-highlight-text:#14181e;--sd-color-warning-bg:#f8e3d0;--sd-color-warning-bg-text:#14181e;--pst-color-danger:#d72d47;--pst-color-danger-text:#fff;--pst-color-danger-highlight:#bb2239;--sd-color-danger:var(--pst-color-danger);--sd-color-danger-text:var(--pst-color-danger-text);--sd-color-danger-highlight:var(--pst-color-danger-highlight);--pst-color-danger-highlight-text:#fff;--sd-color-danger-bg:#f9e1e4;--sd-color-danger-bg-text:#14181e;--pst-color-light:#f3f4f5;--pst-color-light-text:#14181e;--pst-color-light-highlight:#c9cfd6;--sd-color-light:var(--pst-color-light);--sd-color-light-text:var(--pst-color-light-text);--sd-color-light-highlight:var(--pst-color-light-highlight);--pst-color-light-highlight-text:#14181e;--sd-color-light-bg:#f7f7f8;--sd-color-light-bg-text:#14181e;--pst-color-muted:#29313d;--pst-color-muted-text:#fff;--pst-color-muted-highlight:#212936;--sd-color-muted:var(--pst-color-muted);--sd-color-muted-text:var(--pst-color-muted-text);--sd-color-muted-highlight:var(--pst-color-muted-highlight);--pst-color-muted-highlight-text:#fff;--sd-color-muted-bg:#5a6c86;--sd-color-muted-bg-text:#fff;--pst-color-dark:#222832;--pst-color-dark-text:#fff;--pst-color-dark-highlight:#1b222c;--sd-color-dark:var(--pst-color-dark);--sd-color-dark-text:var(--pst-color-dark-text);--sd-color-dark-highlight:var(--pst-color-dark-highlight);--pst-color-dark-highlight-text:#fff;--pst-color-black:#14181e;--pst-color-black-text:#fff;--pst-color-black-highlight:#10141a;--sd-color-black:var(--pst-color-black);--sd-color-black-text:var(--pst-color-black-text);--sd-color-black-highlight:var(--pst-color-black-highlight);--pst-color-black-highlight-text:#fff;--pst-color-white:#fff;--pst-color-white-text:#14181e;--pst-color-white-highlight:#dbd7d7;--sd-color-white:var(--pst-color-white);--sd-color-white-text:var(--pst-color-white-text);--sd-color-white-highlight:var(--pst-color-white-highlight);--pst-color-white-highlight-text:#14181e}html[data-theme=dark]{--pst-color-primary:#3fb1c5;--pst-color-primary-text:#14181e;--pst-color-primary-highlight:#319aac;--sd-color-primary:var(--pst-color-primary);--sd-color-primary-text:var(--pst-color-primary-text);--sd-color-primary-highlight:var(--pst-color-primary-highlight);--pst-color-primary-highlight-text:#14181e;--sd-color-primary-bg:#042c33;--sd-color-primary-bg-text:#fff;--pst-color-secondary:#9c5ffd;--pst-color-secondary-text:#14181e;--pst-color-secondary-highlight:#7c2bfc;--sd-color-secondary:var(--pst-color-secondary);--sd-color-secondary-text:var(--pst-color-secondary-text);--sd-color-secondary-highlight:var(--pst-color-secondary-highlight);--pst-color-secondary-highlight-text:#fff;--sd-color-secondary-bg:#341a61;--sd-color-secondary-bg-text:#fff;--pst-color-success:#5fb488;--pst-color-success-text:#14181e;--pst-color-success-highlight:#47a373;--sd-color-success:var(--pst-color-success);--sd-color-success-text:var(--pst-color-success-text);--sd-color-success-highlight:var(--pst-color-success-highlight);--pst-color-success-highlight-text:#14181e;--sd-color-success-bg:#002f17;--sd-color-success-bg-text:#fff;--pst-color-info:#79a3f2;--pst-color-info-text:#14181e;--pst-color-info-highlight:#4681ee;--sd-color-info:var(--pst-color-info);--sd-color-info-text:var(--pst-color-info-text);--sd-color-info-highlight:var(--pst-color-info-highlight);--pst-color-info-highlight-text:#14181e;--sd-color-info-bg:#06245d;--sd-color-info-bg-text:#fff;--pst-color-warning:#ff9245;--pst-color-warning-text:#14181e;--pst-color-warning-highlight:#ff7614;--sd-color-warning:var(--pst-color-warning);--sd-color-warning-text:var(--pst-color-warning-text);--sd-color-warning-highlight:var(--pst-color-warning-highlight);--pst-color-warning-highlight-text:#14181e;--sd-color-warning-bg:#652a02;--sd-color-warning-bg-text:#fff;--pst-color-danger:#e78894;--pst-color-danger-text:#14181e;--pst-color-danger-highlight:#df596a;--sd-color-danger:var(--pst-color-danger);--sd-color-danger-text:var(--pst-color-danger-text);--sd-color-danger-highlight:var(--pst-color-danger-highlight);--pst-color-danger-highlight-text:#14181e;--sd-color-danger-bg:#4e111b;--sd-color-danger-bg-text:#fff;--pst-color-light:#f3f4f5;--pst-color-light-text:#14181e;--pst-color-light-highlight:#c9cfd6;--sd-color-light:var(--pst-color-light);--sd-color-light-text:var(--pst-color-light-text);--sd-color-light-highlight:var(--pst-color-light-highlight);--pst-color-light-highlight-text:#14181e;--sd-color-light-bg:#a3abb2;--sd-color-light-bg-text:#14181e;--pst-color-muted:#f3f4f5;--pst-color-muted-text:#14181e;--pst-color-muted-highlight:#c9cfd6;--sd-color-muted:var(--pst-color-muted);--sd-color-muted-text:var(--pst-color-muted-text);--sd-color-muted-highlight:var(--pst-color-muted-highlight);--pst-color-muted-highlight-text:#14181e;--sd-color-muted-bg:#1d222b;--sd-color-muted-bg-text:#fff;--pst-color-dark:#222832;--pst-color-dark-text:#fff;--pst-color-dark-highlight:#1b222c;--sd-color-dark:var(--pst-color-dark);--sd-color-dark-text:var(--pst-color-dark-text);--sd-color-dark-highlight:var(--pst-color-dark-highlight);--pst-color-dark-highlight-text:#fff;--pst-color-black:#14181e;--pst-color-black-text:#fff;--pst-color-black-highlight:#10141a;--sd-color-black:var(--pst-color-black);--sd-color-black-text:var(--pst-color-black-text);--sd-color-black-highlight:var(--pst-color-black-highlight);--pst-color-black-highlight-text:#fff;--pst-color-white:#fff;--pst-color-white-text:#14181e;--pst-color-white-highlight:#dbd7d7;--sd-color-white:var(--pst-color-white);--sd-color-white-text:var(--pst-color-white-text);--sd-color-white-highlight:var(--pst-color-white-highlight);--pst-color-white-highlight-text:#14181e}html[data-theme=dark],html[data-theme=light]{--sd-color-card-border:var(--pst-color-border)}html[data-theme=light] .sd-shadow-lg,html[data-theme=light] .sd-shadow-md,html[data-theme=light] .sd-shadow-sm,html[data-theme=light] .sd-shadow-xs{box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important}.bd-content .sd-card{border:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-header{background-color:var(--pst-color-panel-background);border-bottom:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-footer{border-top:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-body,.bd-content .sd-card .sd-card-footer{background-color:var(--pst-color-panel-background)}.bd-content .sd-card .sd-stretched-link:focus-visible{outline:none}.bd-content .sd-card .sd-stretched-link:focus-visible:after{border-radius:.25rem;outline:var(--pst-color-accent) solid .1875rem}.bd-content .sd-card.sd-card-hover:hover{border-color:var(--pst-color-link-hover)}.bd-content .sd-tab-set>input:checked+label{background-color:var(--pst-color-on-background);border-color:var(--pst-color-primary) var(--pst-color-primary) transparent;border-radius:.125rem .125rem 0 0;border-style:solid solid none;border-width:.125rem .125rem 0;color:var(--pst-color-primary);transform:translateY(.125rem)}.bd-content .sd-tab-set>input:focus-visible+label{background-color:var(--pst-color-accent-bg);border:.125rem solid var(--pst-color-accent);border-radius:.125rem;color:var(--pst-color-on-surface)}.bd-content .sd-tab-set>input:not(:checked,:focus-visible)+label:hover{border-color:transparent;color:var(--pst-color-secondary);text-decoration-line:underline;text-decoration-thickness:max(3px,.1875rem,.12em)}.bd-content .sd-tab-set>label{background-color:var(--pst-color-surface);border:.125rem solid transparent;border-radius:.125rem .125rem 0 0;color:var(--pst-color-on-surface);line-height:1.95;margin-inline-end:.25rem;padding:0 .75em}.bd-content .sd-tab-set .sd-tab-content,html[data-theme=dark] .bd-content .sd-tab-set>label{background-color:var(--pst-color-on-background)}.bd-content .sd-tab-set .sd-tab-content{border:.125rem solid var(--pst-color-primary);border-radius:.1875rem;box-shadow:unset;padding:.625rem}details.sd-dropdown{border:0!important;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important}details.sd-dropdown summary.sd-card-header{--pst-sd-dropdown-color:var(--pst-gray-500);--pst-sd-dropdown-bg-color:var(--pst-color-surface);align-items:center;background-color:var(--pst-sd-dropdown-bg-color)!important;border:0!important;border-left:.2rem solid var(--pst-sd-dropdown-color)!important;display:flex;font-weight:600;padding-bottom:.5rem;padding-top:.5rem;position:relative}details.sd-dropdown summary.sd-card-header+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-card-border);border:0}details.sd-dropdown summary.sd-card-header.sd-bg-primary,details.sd-dropdown summary.sd-card-header.sd-bg-primary+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-primary);--pst-sd-dropdown-bg-color:var(--sd-color-primary-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-primary{color:var(--sd-color-primary-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-secondary,details.sd-dropdown summary.sd-card-header.sd-bg-secondary+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-secondary);--pst-sd-dropdown-bg-color:var(--sd-color-secondary-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-secondary{color:var(--sd-color-secondary-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-success,details.sd-dropdown summary.sd-card-header.sd-bg-success+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-success);--pst-sd-dropdown-bg-color:var(--sd-color-success-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-success{color:var(--sd-color-success-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-info,details.sd-dropdown summary.sd-card-header.sd-bg-info+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-info);--pst-sd-dropdown-bg-color:var(--sd-color-info-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-info{color:var(--sd-color-info-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-warning,details.sd-dropdown summary.sd-card-header.sd-bg-warning+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-warning);--pst-sd-dropdown-bg-color:var(--sd-color-warning-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-warning{color:var(--sd-color-warning-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-danger,details.sd-dropdown summary.sd-card-header.sd-bg-danger+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-danger);--pst-sd-dropdown-bg-color:var(--sd-color-danger-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-danger{color:var(--sd-color-danger-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-light,details.sd-dropdown summary.sd-card-header.sd-bg-light+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-light);--pst-sd-dropdown-bg-color:var(--sd-color-light-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-light{color:var(--sd-color-light-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-muted,details.sd-dropdown summary.sd-card-header.sd-bg-muted+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-muted);--pst-sd-dropdown-bg-color:var(--sd-color-muted-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-muted{color:var(--sd-color-muted-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-dark,details.sd-dropdown summary.sd-card-header.sd-bg-dark+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-dark);--pst-sd-dropdown-bg-color:var(--sd-color-dark-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-dark{color:var(--sd-color-dark-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-black,details.sd-dropdown summary.sd-card-header.sd-bg-black+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-black);--pst-sd-dropdown-bg-color:var(--sd-color-black-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-black{color:var(--sd-color-black-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-white,details.sd-dropdown summary.sd-card-header.sd-bg-white+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-white);--pst-sd-dropdown-bg-color:var(--sd-color-white-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-white{color:var(--sd-color-white-bg-text)!important}details.sd-dropdown summary.sd-card-header:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}details.sd-dropdown summary.sd-card-header+div.sd-summary-content{background-color:var(--pst-color-on-background);border-bottom-left-radius:calc(.25rem - 1px);border-left:.2rem solid var(--pst-sd-dropdown-color)!important}details.sd-dropdown summary.sd-card-header span.sd-summary-icon{align-items:center;color:var(--pst-sd-dropdown-color)!important;display:inline-flex}details.sd-dropdown summary.sd-card-header span.sd-summary-icon svg{opacity:1}details.sd-dropdown summary.sd-card-header .sd-summary-down,details.sd-dropdown summary.sd-card-header .sd-summary-up{top:.7rem}details.sd-dropdown summary.sd-card-header:focus-visible{outline:var(--pst-color-accent) solid .1875rem;outline-offset:-.1875rem}html .sd-btn{min-width:2.25rem;padding:.3125rem .75rem .4375rem}html .sd-btn:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}html .sd-btn-primary:hover{color:var(--pst-color-primary-highlight-text)!important}html .sd-btn-secondary:hover{color:var(--pst-color-secondary-highlight-text)!important}html .sd-btn-success:hover{color:var(--pst-color-success-highlight-text)!important}html .sd-btn-info:hover{color:var(--pst-color-info-highlight-text)!important}html .sd-btn-warning:hover{color:var(--pst-color-warning-highlight-text)!important}html .sd-btn-danger:hover{color:var(--pst-color-danger-highlight-text)!important}html .sd-btn-light:hover{color:var(--pst-color-light-highlight-text)!important}html .sd-btn-muted:hover{color:var(--pst-color-muted-highlight-text)!important}html .sd-btn-dark:hover{color:var(--pst-color-dark-highlight-text)!important}html .sd-btn-black:hover{color:var(--pst-color-black-highlight-text)!important}html .sd-btn-white:hover{color:var(--pst-color-white-highlight-text)!important}html .sd-btn-outline-primary:focus-visible,html .sd-btn-primary:focus-visible{background-color:var(--sd-color-primary)!important;border-color:var(--sd-color-primary)!important;outline:var(--sd-color-primary) solid .1875rem;outline-offset:.1875rem}html .sd-btn-outline-secondary:focus-visible,html .sd-btn-secondary:focus-visible{background-color:var(--sd-color-secondary)!important;border-color:var(--sd-color-secondary)!important;outline:var(--sd-color-secondary) solid .1875rem;outline-offset:.1875rem}html .sd-btn-outline-success:focus-visible,html .sd-btn-success:focus-visible{background-color:var(--sd-color-success)!important;border-color:var(--sd-color-success)!important;outline:var(--sd-color-success) solid .1875rem;outline-offset:.1875rem}html .sd-btn-info:focus-visible,html .sd-btn-outline-info:focus-visible{background-color:var(--sd-color-info)!important;border-color:var(--sd-color-info)!important;outline:var(--sd-color-info) solid .1875rem;outline-offset:.1875rem}html .sd-btn-outline-warning:focus-visible,html .sd-btn-warning:focus-visible{background-color:var(--sd-color-warning)!important;border-color:var(--sd-color-warning)!important;outline:var(--sd-color-warning) solid .1875rem;outline-offset:.1875rem}html .sd-btn-danger:focus-visible,html .sd-btn-outline-danger:focus-visible{background-color:var(--sd-color-danger)!important;border-color:var(--sd-color-danger)!important;outline:var(--sd-color-danger) solid .1875rem;outline-offset:.1875rem}html .sd-btn-light:focus-visible,html .sd-btn-outline-light:focus-visible{background-color:var(--sd-color-light)!important;border-color:var(--sd-color-light)!important;outline:var(--sd-color-light) solid .1875rem;outline-offset:.1875rem}html .sd-btn-muted:focus-visible,html .sd-btn-outline-muted:focus-visible{background-color:var(--sd-color-muted)!important;border-color:var(--sd-color-muted)!important;outline:var(--sd-color-muted) solid .1875rem;outline-offset:.1875rem}html .sd-btn-dark:focus-visible,html .sd-btn-outline-dark:focus-visible{background-color:var(--sd-color-dark)!important;border-color:var(--sd-color-dark)!important;outline:var(--sd-color-dark) solid .1875rem;outline-offset:.1875rem}html .sd-btn-black:focus-visible,html .sd-btn-outline-black:focus-visible{background-color:var(--sd-color-black)!important;border-color:var(--sd-color-black)!important;outline:var(--sd-color-black) solid .1875rem;outline-offset:.1875rem}html .sd-btn-outline-white:focus-visible,html .sd-btn-white:focus-visible{background-color:var(--sd-color-white)!important;border-color:var(--sd-color-white)!important;outline:var(--sd-color-white) solid .1875rem;outline-offset:.1875rem}.bd-content .admonition button.toggle-button{color:inherit}.bd-content .admonition button.toggle-button.toggle-button-hidden .toggle-chevron-right{transform:rotate(90deg);transition:none}.bd-content .admonition button.toggle-button .toggle-chevron-right{transform:rotate(-90deg);transition:none}.bd-content .admonition:focus-within{overflow:visible}.bd-content .admonition:focus-within .admonition-title:focus-within:before{border:.1875rem solid var(--pst-color-accent);border-radius:.1875rem;content:"";height:100%;transform:translateX(-.2rem);width:calc(100% + .2rem)}.bd-content .admonition:focus-within:not(.toggle-hidden) .admonition-title:focus-within:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.bd-content details.toggle-details summary{border-left:3px solid var(--pst-color-primary)}.bd-content details.toggle-details summary .toggle-chevron-right{transform:rotate(90deg);transition:none}.bd-content details.toggle-details[open] .toggle-chevron-right{transform:rotate(-90deg);transition:none}.bd-content details.toggle-details[open] :focus-visible{border-bottom-left-radius:0;border-bottom-right-radius:0}html .jp-RenderedHTMLCommon,html div.rendered_html{margin:.1875rem}html .jp-RenderedHTMLCommon table,html div.rendered_html table{table-layout:auto}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe,.bd-content .nboutput .output_area.rendered_html table.dataframe{border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td~td,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td~th,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th~td,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th~th,.bd-content .nboutput .output_area.rendered_html table.dataframe td~td,.bd-content .nboutput .output_area.rendered_html table.dataframe td~th,.bd-content .nboutput .output_area.rendered_html table.dataframe th~td,.bd-content .nboutput .output_area.rendered_html table.dataframe th~th{border-left:1px solid var(--pst-color-table-inner-border)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe thead tr,.bd-content .nboutput .output_area.rendered_html table.dataframe thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(odd),.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(2n),.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:hover,.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:hover{background-color:var(--pst-color-table-row-hover-bg)}html[data-theme=dark] .bd-content .nboutput .output_area .widget-subarea,html[data-theme=dark] .bd-content .nboutput .output_area.rendered_html:not(:has(table.dataframe)){background-color:var(--pst-color-text-base);border-radius:.25rem;color:var(--pst-color-on-background);padding:.5rem}html[data-theme=dark] .bd-content .nboutput .output_area.stderr{background-color:var(--pst-color-danger)}div.nblast.container{margin-bottom:1rem}html[data-theme=light] .nbinput.container .prompt pre{color:#005b82}html[data-theme=dark] .nbinput.container .prompt pre{color:#00e0e0}html[data-theme=light] .nboutput.container .prompt pre{color:#a12236}html[data-theme=dark] .nboutput.container .prompt pre{color:#ffa07a}div.cell_output .output{max-width:100%;overflow-x:auto}.bd-content div.cell_output table.dataframe{border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.bd-content div.cell_output table.dataframe td~td,.bd-content div.cell_output table.dataframe td~th,.bd-content div.cell_output table.dataframe th~td,.bd-content div.cell_output table.dataframe th~th{border-left:1px solid var(--pst-color-table-inner-border)}.bd-content div.cell_output table.dataframe thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.bd-content div.cell_output table.dataframe tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.bd-content div.cell_output table.dataframe tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.bd-content div.cell_output table.dataframe tbody tr:hover{background-color:var(--pst-color-table-row-hover-bg)}html[data-theme=dark] .bd-content div.cell_output .text_html:not(:has(table.dataframe)),html[data-theme=dark] .bd-content div.cell_output .widget-subarea,html[data-theme=dark] .bd-content div.cell_output img{background-color:var(--pst-color-text-base);border-radius:.25rem;color:var(--pst-color-on-background);padding:.5rem}.bd-content div.cell_input{display:flex;flex-direction:column;justify-content:stretch}.bd-content div.cell_input,.bd-content div.output{border-radius:.25rem}.bd-content div.output table{table-layout:auto}html[data-theme=dark] .bd-content img.leaflet-tile.leaflet-tile-loaded{border-radius:0;padding:0}.bd-search-container div#search-results>.h2,.bd-search-container div#search-results>h2{font-size:var(--pst-font-size-icon);margin-top:1rem}.bd-search-container div#search-results p.search-summary{color:var(--pst-color-text-muted)}.bd-search-container ul.search{list-style:none;margin:0}.bd-search-container ul.search li{background-image:none;border-top:1px solid var(--pst-color-text-muted);margin:1rem 0;padding:1rem 0}.bd-search-container ul.search li>a{font-size:1.2em}.bd-search-container ul.search li div.context,.bd-search-container ul.search li p.context{color:var(--pst-color-text-base);margin:.5em 0 0}.bd-search-container ul.search li div.context a:before,.bd-search-container ul.search li p.context a:before{color:var(--pst-color-text-muted);content:"#";padding-right:.2em} + );border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.table td~td,.table td~th,.table th~td,.table th~th{border-left:1px solid var(--pst-color-table-inner-border)}.table thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.table tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.table tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.pst-scrollable-table-container{overflow-x:auto}.toctree-wrapper p.caption{font-size:1.5em;margin-bottom:0}.toctree-wrapper>ul{padding-left:0}.toctree-wrapper li[class^=toctree-l]{list-style:none;margin-bottom:.2em}.toctree-wrapper li[class^=toctree-l]>a{font-size:1.1em;list-style:none}.toctree-wrapper li[class^=toctree-l]>ul{list-style:none;padding-inline-start:1.5em}.toctree-wrapper .toctree-l1>a{font-size:1.3em}div.topic.contents ul.simple,nav.contents ul.simple{list-style:none;padding-left:0}div.math,span.math{align-items:center;display:flex;max-width:100%;overflow:hidden}span.math{display:inline-flex}div.math{flex-direction:row-reverse;gap:.5em}div.math span.eqno a.headerlink{font-size:1em;position:relative}div.math mjx-container{flex-grow:1;overflow:auto;padding-bottom:.2rem}div.math mjx-container mjx-assistive-mml{height:0}.ablog-sidebar-item .h2,.ablog-sidebar-item .h3,.ablog-sidebar-item h2,.ablog-sidebar-item h3{font-size:var(--pst-sidebar-header-font-size);margin-top:.5rem}.ablog-sidebar-item .h2 a,.ablog-sidebar-item .h3 a,.ablog-sidebar-item h2 a,.ablog-sidebar-item h3 a{color:var(--pst-color-text-base)}.ablog-sidebar-item ul{display:flex;flex-direction:column;gap:.5em;list-style:none;margin-bottom:0;overflow-y:hidden;padding-left:0}.ablog-sidebar-item ul.ablog-cloud{flex-flow:row wrap;gap:.5rem}.ablog-sidebar-item ul.ablog-cloud li{align-items:center;display:flex}.ablog__prev-next{display:flex;font-size:1.2em;padding:1rem 0}.ablog__prev-next>span{display:flex;max-width:45%}.ablog__prev-next>span a{align-items:center;display:flex;gap:1rem;line-height:1.5rem;margin-left:auto}.ablog__prev-next>span a i:before{color:var(--pst-color-text-base)}.ablog__prev-next span.ablog__prev i.fa-arrow-circle-left:before{content:var(--pst-icon-angle-left)}.ablog__prev-next span.ablog__spacer{display:none}.ablog__prev-next span.ablog__next{margin-left:auto;text-align:right}.ablog__prev-next span.ablog__next i.fa-arrow-circle-right:before{content:var(--pst-icon-angle-right)}.ablog__collection,.postlist{padding-left:0}.ablog__collection .ablog-post,.postlist .ablog-post{list-style:none}.ablog__collection .ablog-post .ablog-archive,.postlist .ablog-post .ablog-archive{display:flex;flex-flow:row wrap;font-size:.75rem;gap:1rem;list-style:none;padding-left:0}.ablog__collection .ablog-post .ablog-post-title,.postlist .ablog-post .ablog-post-title{font-size:1.25rem;margin-top:0}.ablog__collection .ablog-post .ablog-post-title a,.postlist .ablog-post .ablog-post-title a{font-weight:700}.ablog__collection .ablog-post .ablog-post-expand,.postlist .ablog-post .ablog-post-expand{margin-bottom:.5rem}.docutils.container{margin-left:unset;margin-right:unset;max-width:unset;padding-left:unset;padding-right:unset;width:unset}.btn{--bs-btn-focus-box-shadow:0 0 0 0.1875rem var(--pst-color-accent)}div.highlight button.copybtn{align-items:center;background-color:var(--pst-color-surface);border:none;display:flex;justify-content:center}div.highlight button.copybtn:not(.success){color:var(--pst-color-muted)}div.highlight button.copybtn:hover:not(.success){background-color:var(--pst-color-shadow);color:var(--pst-color-text)}div.highlight button.copybtn.o-tooltip--left:after{background-color:var(--pst-color-surface);color:var(--pst-color-text)}div.highlight button.copybtn:focus{opacity:1}div.highlight button.copybtn:focus-visible{outline:var(--pst-color-accent) solid .1875rem}div.highlight:has(button.copybtn){min-height:2em}#ethical-ad-placement .ethical-footer a,#ethical-ad-placement .ethical-footer a:active,#ethical-ad-placement .ethical-footer a:hover,#ethical-ad-placement .ethical-footer a:visited,#ethical-ad-placement .ethical-sidebar a,#ethical-ad-placement .ethical-sidebar a:active,#ethical-ad-placement .ethical-sidebar a:hover,#ethical-ad-placement .ethical-sidebar a:visited{color:var(--pst-color-text-base)}#ethical-ad-placement .ethical-footer,#ethical-ad-placement .ethical-sidebar{background-color:var(--pst-color-background);border:1px solid var(--pst-color-border);border-radius:5px;color:var(--pst-color-text-base);font-size:14px;line-height:20px}.bd-content div.jupyter_container{background-color:unset;border:none;box-shadow:none}.bd-content div.jupyter_container div.highlight,.bd-content div.jupyter_container div.output{border-radius:.25rem}.bd-content div.jupyter_container div.highlight{background-color:var(--pst-color-surface)}.bd-content div.jupyter_container .cell_input,.bd-content div.jupyter_container .cell_output{border-radius:.25rem}.bd-content div.jupyter_container .cell_input pre,.bd-content div.jupyter_container .cell_output pre{padding:1rem}html[data-theme=dark] div.graphviz>object.inheritance{color-scheme:normal;filter:brightness(.8) invert(.82) contrast(1.2)}.xr-wrap[hidden]{display:block!important}.jp-OutputArea-output.lm-Widget{overflow:auto}:root{--pst-teal-50:#f4fbfc;--pst-teal-100:#e9f6f8;--pst-teal-200:#d0ecf1;--pst-teal-300:#abdde6;--pst-teal-400:#3fb1c5;--pst-teal-500:#0a7d91;--pst-teal-600:#085d6c;--pst-teal-700:#064752;--pst-teal-800:#042c33;--pst-teal-900:#021b1f;--pst-violet-50:#f4eefb;--pst-violet-100:#e0c7ff;--pst-violet-200:#d5b4fd;--pst-violet-300:#b780ff;--pst-violet-400:#9c5ffd;--pst-violet-500:#8045e5;--pst-violet-600:#6432bd;--pst-violet-700:#4b258f;--pst-violet-800:#341a61;--pst-violet-900:#1e0e39;--pst-gray-50:#f9f9fa;--pst-gray-100:#f3f4f5;--pst-gray-200:#e5e7ea;--pst-gray-300:#d1d5da;--pst-gray-400:#9ca4af;--pst-gray-500:#677384;--pst-gray-600:#48566b;--pst-gray-700:#29313d;--pst-gray-800:#222832;--pst-gray-900:#14181e;--pst-pink-50:#fcf8fd;--pst-pink-100:#fcf0fa;--pst-pink-200:#f8dff5;--pst-pink-300:#f3c7ee;--pst-pink-400:#e47fd7;--pst-pink-500:#c132af;--pst-pink-600:#912583;--pst-pink-700:#6e1c64;--pst-pink-800:#46123f;--pst-pink-900:#2b0b27;--pst-foundation-white:#fff;--pst-foundation-black:#14181e}html:not([data-theme]){--pst-color-primary:#0a7d91;--pst-color-primary-bg:#d0ecf1;--pst-color-secondary:#8045e5;--pst-color-secondary-bg:#e0c7ff;--pst-color-accent:#c132af;--pst-color-accent-bg:#f8dff5;--pst-color-info:#276be9;--pst-color-info-bg:#dce7fc;--pst-color-warning:#f66a0a;--pst-color-warning-bg:#f8e3d0;--pst-color-success:#00843f;--pst-color-success-bg:#d6ece1;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger:#d72d47;--pst-color-danger-bg:#f9e1e4;--pst-color-text-base:#222832;--pst-color-text-muted:#48566b;--pst-color-shadow:rgba(0,0,0,.1);--pst-color-border:#d1d5da;--pst-color-border-muted:rgba(23,23,26,.2);--pst-color-blockquote-notch:#677384;--pst-color-inline-code:#912583;--pst-color-inline-code-links:#085d6c;--pst-color-target:#f3cf95;--pst-color-table:#14181e;--pst-color-table-row-hover-bg:#d5b4fd;--pst-color-table-inner-border:#e5e7ea;--pst-color-background:#fff;--pst-color-on-background:#fff;--pst-color-surface:#f3f4f5;--pst-color-on-surface:#222832;--pst-color-heading:var(--pst-color-text-base);--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface)}html:not([data-theme]) .only-dark,html:not([data-theme]) .only-dark~figcaption{display:none!important}html[data-theme=light]{--pst-color-primary-bg:#d0ecf1;--pst-color-secondary-bg:#e0c7ff;--pst-color-accent:#c132af;--pst-color-accent-bg:#f8dff5;--pst-color-info-bg:#dce7fc;--pst-color-warning-bg:#f8e3d0;--pst-color-success-bg:#d6ece1;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger-bg:#f9e1e4;--pst-color-text-base:#222832;--pst-color-text-muted:#48566b;--pst-color-shadow:rgba(0,0,0,.1);--pst-color-border:#d1d5da;--pst-color-border-muted:rgba(23,23,26,.2);--pst-color-blockquote-notch:#677384;--pst-color-inline-code:#912583;--pst-color-inline-code-links:#085d6c;--pst-color-target:#f3cf95;--pst-color-table:#14181e;--pst-color-table-row-hover-bg:#d5b4fd;--pst-color-table-inner-border:#e5e7ea;--pst-color-background:#fff;--pst-color-on-background:#fff;--pst-color-surface:#f3f4f5;--pst-color-on-surface:#222832;--pst-color-heading:var(--pst-color-text-base);--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface);color-scheme:light}html[data-theme=light] .only-dark,html[data-theme=light] .only-dark~figcaption{display:none!important}html[data-theme=dark]{--pst-color-primary-bg:#042c33;--pst-color-secondary-bg:#341a61;--pst-color-accent:#e47fd7;--pst-color-accent-bg:#46123f;--pst-color-info-bg:#06245d;--pst-color-warning-bg:#652a02;--pst-color-success-bg:#002f17;--pst-color-attention:var(--pst-color-warning);--pst-color-attention-bg:var(--pst-color-warning-bg);--pst-color-danger-bg:#4e111b;--pst-color-text-base:#ced6dd;--pst-color-text-muted:#9ca4af;--pst-color-shadow:rgba(0,0,0,.2);--pst-color-border:#48566b;--pst-color-border-muted:#29313d;--pst-color-blockquote-notch:#9ca4af;--pst-color-inline-code:#f3c7ee;--pst-color-inline-code-links:#3fb1c5;--pst-color-target:#675c04;--pst-color-table:#fff;--pst-color-table-row-hover-bg:#4b258f;--pst-color-table-inner-border:#364150;--pst-color-background:#14181e;--pst-color-on-background:#222832;--pst-color-surface:#29313d;--pst-color-on-surface:#f3f4f5;--pst-color-heading:var(--pst-color-text-base);--pst-color-link:var(--pst-color-primary);--pst-color-link-hover:var(--pst-color-secondary);--pst-color-table-outer-border:var(--pst-color-surface);--pst-color-table-heading-bg:var(--pst-color-surface);--pst-color-table-row-zebra-high-bg:var(--pst-color-on-background);--pst-color-table-row-zebra-low-bg:var(--pst-color-surface);color-scheme:dark}html[data-theme=dark] .only-light,html[data-theme=dark] .only-light~figcaption{display:none!important}html[data-theme=dark] img:not(.only-dark,.dark-light){filter:brightness(.8) contrast(1.2)}html[data-theme=dark] .bd-content img:not(.only-dark,.dark-light){background-color:#fff;border-radius:.25rem}html[data-theme=dark] .MathJax_SVG *{fill:var(--pst-color-text-base)}.pst-color-primary{color:var(--pst-color-primary)}.pst-color-secondary{color:var(--pst-color-secondary)}.pst-color-accent{color:var(--pst-color-accent)}.pst-color-info{color:var(--pst-color-info)}.pst-color-warning{color:var(--pst-color-warning)}.pst-color-success{color:var(--pst-color-success)}.pst-color-attention{color:var(--pst-color-attention)}.pst-color-danger{color:var(--pst-color-danger)}.pst-color-text-base{color:var(--pst-color-text-base)}.pst-color-text-muted{color:var(--pst-color-text-muted)}.pst-color-shadow{color:var(--pst-color-shadow)}.pst-color-border{color:var(--pst-color-border)}.pst-color-border-muted{color:var(--pst-color-border-muted)}.pst-color-blockquote-notch{color:var(--pst-color-blockquote-notch)}.pst-color-inline-code{color:var(--pst-color-inline-code)}.pst-color-inline-code-links{color:var(--pst-color-inline-code-links)}.pst-color-target{color:var(--pst-color-target)}.pst-color-table{color:var(--pst-color-table)}.pst-color-table-row-hover{color:var(--pst-color-table-row-hover)}.pst-color-table-inner-border{color:var(--pst-color-table-inner-border)}.pst-color-background{color:var(--pst-color-background)}.pst-color-on-background{color:var(--pst-color-on-background)}.pst-color-surface{color:var(--pst-color-surface)}.pst-color-on-surface{color:var(--pst-color-on-surface)}html[data-theme=light]{--pst-color-primary:#0a7d91;--pst-color-primary-text:#fff;--pst-color-primary-highlight:#086b7c;--sd-color-primary:var(--pst-color-primary);--sd-color-primary-text:var(--pst-color-primary-text);--sd-color-primary-highlight:var(--pst-color-primary-highlight);--pst-color-primary-highlight-text:#fff;--sd-color-primary-bg:#d0ecf1;--sd-color-primary-bg-text:#14181e;--pst-color-secondary:#8045e5;--pst-color-secondary-text:#fff;--pst-color-secondary-highlight:#651ee0;--sd-color-secondary:var(--pst-color-secondary);--sd-color-secondary-text:var(--pst-color-secondary-text);--sd-color-secondary-highlight:var(--pst-color-secondary-highlight);--pst-color-secondary-highlight-text:#fff;--sd-color-secondary-bg:#e0c7ff;--sd-color-secondary-bg-text:#14181e;--pst-color-success:#00843f;--pst-color-success-text:#fff;--pst-color-success-highlight:#007036;--sd-color-success:var(--pst-color-success);--sd-color-success-text:var(--pst-color-success-text);--sd-color-success-highlight:var(--pst-color-success-highlight);--pst-color-success-highlight-text:#fff;--sd-color-success-bg:#d6ece1;--sd-color-success-bg-text:#14181e;--pst-color-info:#276be9;--pst-color-info-text:#fff;--pst-color-info-highlight:#1457d3;--sd-color-info:var(--pst-color-info);--sd-color-info-text:var(--pst-color-info-text);--sd-color-info-highlight:var(--pst-color-info-highlight);--pst-color-info-highlight-text:#fff;--sd-color-info-bg:#dce7fc;--sd-color-info-bg-text:#14181e;--pst-color-warning:#f66a0a;--pst-color-warning-text:#14181e;--pst-color-warning-highlight:#d25a07;--sd-color-warning:var(--pst-color-warning);--sd-color-warning-text:var(--pst-color-warning-text);--sd-color-warning-highlight:var(--pst-color-warning-highlight);--pst-color-warning-highlight-text:#14181e;--sd-color-warning-bg:#f8e3d0;--sd-color-warning-bg-text:#14181e;--pst-color-danger:#d72d47;--pst-color-danger-text:#fff;--pst-color-danger-highlight:#bb2239;--sd-color-danger:var(--pst-color-danger);--sd-color-danger-text:var(--pst-color-danger-text);--sd-color-danger-highlight:var(--pst-color-danger-highlight);--pst-color-danger-highlight-text:#fff;--sd-color-danger-bg:#f9e1e4;--sd-color-danger-bg-text:#14181e;--pst-color-light:#f3f4f5;--pst-color-light-text:#14181e;--pst-color-light-highlight:#c9cfd6;--sd-color-light:var(--pst-color-light);--sd-color-light-text:var(--pst-color-light-text);--sd-color-light-highlight:var(--pst-color-light-highlight);--pst-color-light-highlight-text:#14181e;--sd-color-light-bg:#f7f7f8;--sd-color-light-bg-text:#14181e;--pst-color-muted:#29313d;--pst-color-muted-text:#fff;--pst-color-muted-highlight:#212936;--sd-color-muted:var(--pst-color-muted);--sd-color-muted-text:var(--pst-color-muted-text);--sd-color-muted-highlight:var(--pst-color-muted-highlight);--pst-color-muted-highlight-text:#fff;--sd-color-muted-bg:#5a6c86;--sd-color-muted-bg-text:#fff;--pst-color-dark:#222832;--pst-color-dark-text:#fff;--pst-color-dark-highlight:#1b222c;--sd-color-dark:var(--pst-color-dark);--sd-color-dark-text:var(--pst-color-dark-text);--sd-color-dark-highlight:var(--pst-color-dark-highlight);--pst-color-dark-highlight-text:#fff;--pst-color-black:#14181e;--pst-color-black-text:#fff;--pst-color-black-highlight:#10141a;--sd-color-black:var(--pst-color-black);--sd-color-black-text:var(--pst-color-black-text);--sd-color-black-highlight:var(--pst-color-black-highlight);--pst-color-black-highlight-text:#fff;--pst-color-white:#fff;--pst-color-white-text:#14181e;--pst-color-white-highlight:#dbd7d7;--sd-color-white:var(--pst-color-white);--sd-color-white-text:var(--pst-color-white-text);--sd-color-white-highlight:var(--pst-color-white-highlight);--pst-color-white-highlight-text:#14181e}html[data-theme=dark]{--pst-color-primary:#3fb1c5;--pst-color-primary-text:#14181e;--pst-color-primary-highlight:#319aac;--sd-color-primary:var(--pst-color-primary);--sd-color-primary-text:var(--pst-color-primary-text);--sd-color-primary-highlight:var(--pst-color-primary-highlight);--pst-color-primary-highlight-text:#14181e;--sd-color-primary-bg:#042c33;--sd-color-primary-bg-text:#fff;--pst-color-secondary:#9c5ffd;--pst-color-secondary-text:#14181e;--pst-color-secondary-highlight:#7c2bfc;--sd-color-secondary:var(--pst-color-secondary);--sd-color-secondary-text:var(--pst-color-secondary-text);--sd-color-secondary-highlight:var(--pst-color-secondary-highlight);--pst-color-secondary-highlight-text:#fff;--sd-color-secondary-bg:#341a61;--sd-color-secondary-bg-text:#fff;--pst-color-success:#5fb488;--pst-color-success-text:#14181e;--pst-color-success-highlight:#47a373;--sd-color-success:var(--pst-color-success);--sd-color-success-text:var(--pst-color-success-text);--sd-color-success-highlight:var(--pst-color-success-highlight);--pst-color-success-highlight-text:#14181e;--sd-color-success-bg:#002f17;--sd-color-success-bg-text:#fff;--pst-color-info:#79a3f2;--pst-color-info-text:#14181e;--pst-color-info-highlight:#4681ee;--sd-color-info:var(--pst-color-info);--sd-color-info-text:var(--pst-color-info-text);--sd-color-info-highlight:var(--pst-color-info-highlight);--pst-color-info-highlight-text:#14181e;--sd-color-info-bg:#06245d;--sd-color-info-bg-text:#fff;--pst-color-warning:#ff9245;--pst-color-warning-text:#14181e;--pst-color-warning-highlight:#ff7614;--sd-color-warning:var(--pst-color-warning);--sd-color-warning-text:var(--pst-color-warning-text);--sd-color-warning-highlight:var(--pst-color-warning-highlight);--pst-color-warning-highlight-text:#14181e;--sd-color-warning-bg:#652a02;--sd-color-warning-bg-text:#fff;--pst-color-danger:#e78894;--pst-color-danger-text:#14181e;--pst-color-danger-highlight:#df596a;--sd-color-danger:var(--pst-color-danger);--sd-color-danger-text:var(--pst-color-danger-text);--sd-color-danger-highlight:var(--pst-color-danger-highlight);--pst-color-danger-highlight-text:#14181e;--sd-color-danger-bg:#4e111b;--sd-color-danger-bg-text:#fff;--pst-color-light:#f3f4f5;--pst-color-light-text:#14181e;--pst-color-light-highlight:#c9cfd6;--sd-color-light:var(--pst-color-light);--sd-color-light-text:var(--pst-color-light-text);--sd-color-light-highlight:var(--pst-color-light-highlight);--pst-color-light-highlight-text:#14181e;--sd-color-light-bg:#a3abb2;--sd-color-light-bg-text:#14181e;--pst-color-muted:#f3f4f5;--pst-color-muted-text:#14181e;--pst-color-muted-highlight:#c9cfd6;--sd-color-muted:var(--pst-color-muted);--sd-color-muted-text:var(--pst-color-muted-text);--sd-color-muted-highlight:var(--pst-color-muted-highlight);--pst-color-muted-highlight-text:#14181e;--sd-color-muted-bg:#1d222b;--sd-color-muted-bg-text:#fff;--pst-color-dark:#222832;--pst-color-dark-text:#fff;--pst-color-dark-highlight:#1b222c;--sd-color-dark:var(--pst-color-dark);--sd-color-dark-text:var(--pst-color-dark-text);--sd-color-dark-highlight:var(--pst-color-dark-highlight);--pst-color-dark-highlight-text:#fff;--pst-color-black:#14181e;--pst-color-black-text:#fff;--pst-color-black-highlight:#10141a;--sd-color-black:var(--pst-color-black);--sd-color-black-text:var(--pst-color-black-text);--sd-color-black-highlight:var(--pst-color-black-highlight);--pst-color-black-highlight-text:#fff;--pst-color-white:#fff;--pst-color-white-text:#14181e;--pst-color-white-highlight:#dbd7d7;--sd-color-white:var(--pst-color-white);--sd-color-white-text:var(--pst-color-white-text);--sd-color-white-highlight:var(--pst-color-white-highlight);--pst-color-white-highlight-text:#14181e}html[data-theme=dark],html[data-theme=light]{--sd-color-card-border:var(--pst-color-border)}html[data-theme=light] .sd-shadow-lg,html[data-theme=light] .sd-shadow-md,html[data-theme=light] .sd-shadow-sm,html[data-theme=light] .sd-shadow-xs{box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important}.bd-content .sd-card{border:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-header{background-color:var(--pst-color-on-background);border-bottom:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-footer{border-top:1px solid var(--pst-color-border)}.bd-content .sd-card .sd-card-body,.bd-content .sd-card .sd-card-footer{background-color:var(--pst-color-on-background)}.bd-content .sd-card .sd-stretched-link:focus-visible{outline:none}.bd-content .sd-card .sd-stretched-link:focus-visible:after{border-radius:.25rem;outline:var(--pst-color-accent) solid .1875rem}.bd-content .sd-card.sd-card-hover:hover{border-color:var(--pst-color-link-hover)}.bd-content .sd-tab-set>input:checked+label{background-color:var(--pst-color-on-background);border-color:var(--pst-color-primary) var(--pst-color-primary) transparent;border-radius:.125rem .125rem 0 0;border-style:solid solid none;border-width:.125rem .125rem 0;color:var(--pst-color-primary);transform:translateY(.125rem)}.bd-content .sd-tab-set>input:focus-visible+label{background-color:var(--pst-color-accent-bg);border:.125rem solid var(--pst-color-accent);border-radius:.125rem;color:var(--pst-color-on-surface)}.bd-content .sd-tab-set>input:not(:checked,:focus-visible)+label:hover{border-color:transparent;color:var(--pst-color-secondary);text-decoration-line:underline;text-decoration-thickness:max(3px,.1875rem,.12em)}.bd-content .sd-tab-set>label{background-color:var(--pst-color-surface);border:.125rem solid transparent;border-radius:.125rem .125rem 0 0;color:var(--pst-color-on-surface);line-height:1.95;margin-inline-end:.25rem;padding:0 .75em}.bd-content .sd-tab-set .sd-tab-content,html[data-theme=dark] .bd-content .sd-tab-set>label{background-color:var(--pst-color-on-background)}.bd-content .sd-tab-set .sd-tab-content{border:.125rem solid var(--pst-color-primary);border-radius:.1875rem;box-shadow:unset;padding:.625rem}details.sd-dropdown{border:0!important;box-shadow:0 .2rem .5rem var(--pst-color-shadow),0 0 .0625rem var(--pst-color-shadow)!important}details.sd-dropdown summary.sd-card-header{--pst-sd-dropdown-color:var(--pst-gray-500);--pst-sd-dropdown-bg-color:var(--pst-color-surface);align-items:center;background-color:var(--pst-sd-dropdown-bg-color)!important;border:0!important;border-left:.2rem solid var(--pst-sd-dropdown-color)!important;display:flex;font-weight:600;padding-bottom:.5rem;padding-top:.5rem;position:relative}details.sd-dropdown summary.sd-card-header+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-card-border);border:0}details.sd-dropdown summary.sd-card-header.sd-bg-primary,details.sd-dropdown summary.sd-card-header.sd-bg-primary+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-primary);--pst-sd-dropdown-bg-color:var(--sd-color-primary-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-primary{color:var(--sd-color-primary-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-secondary,details.sd-dropdown summary.sd-card-header.sd-bg-secondary+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-secondary);--pst-sd-dropdown-bg-color:var(--sd-color-secondary-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-secondary{color:var(--sd-color-secondary-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-success,details.sd-dropdown summary.sd-card-header.sd-bg-success+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-success);--pst-sd-dropdown-bg-color:var(--sd-color-success-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-success{color:var(--sd-color-success-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-info,details.sd-dropdown summary.sd-card-header.sd-bg-info+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-info);--pst-sd-dropdown-bg-color:var(--sd-color-info-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-info{color:var(--sd-color-info-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-warning,details.sd-dropdown summary.sd-card-header.sd-bg-warning+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-warning);--pst-sd-dropdown-bg-color:var(--sd-color-warning-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-warning{color:var(--sd-color-warning-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-danger,details.sd-dropdown summary.sd-card-header.sd-bg-danger+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-danger);--pst-sd-dropdown-bg-color:var(--sd-color-danger-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-danger{color:var(--sd-color-danger-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-light,details.sd-dropdown summary.sd-card-header.sd-bg-light+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-light);--pst-sd-dropdown-bg-color:var(--sd-color-light-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-light{color:var(--sd-color-light-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-muted,details.sd-dropdown summary.sd-card-header.sd-bg-muted+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-muted);--pst-sd-dropdown-bg-color:var(--sd-color-muted-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-muted{color:var(--sd-color-muted-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-dark,details.sd-dropdown summary.sd-card-header.sd-bg-dark+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-dark);--pst-sd-dropdown-bg-color:var(--sd-color-dark-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-dark{color:var(--sd-color-dark-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-black,details.sd-dropdown summary.sd-card-header.sd-bg-black+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-black);--pst-sd-dropdown-bg-color:var(--sd-color-black-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-black{color:var(--sd-color-black-bg-text)!important}details.sd-dropdown summary.sd-card-header.sd-bg-white,details.sd-dropdown summary.sd-card-header.sd-bg-white+div.sd-summary-content{--pst-sd-dropdown-color:var(--sd-color-white);--pst-sd-dropdown-bg-color:var(--sd-color-white-bg)}details.sd-dropdown summary.sd-card-header.sd-bg-text-white{color:var(--sd-color-white-bg-text)!important}details.sd-dropdown summary.sd-card-header:before{content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:-1}details.sd-dropdown summary.sd-card-header+div.sd-summary-content{background-color:var(--pst-color-on-background);border-bottom-left-radius:calc(.25rem - 1px);border-left:.2rem solid var(--pst-sd-dropdown-color)!important}details.sd-dropdown summary.sd-card-header span.sd-summary-icon{align-items:center;color:var(--pst-sd-dropdown-color)!important;display:inline-flex}details.sd-dropdown summary.sd-card-header span.sd-summary-icon svg{opacity:1}details.sd-dropdown summary.sd-card-header .sd-summary-down,details.sd-dropdown summary.sd-card-header .sd-summary-up{top:.7rem}details.sd-dropdown summary.sd-card-header:hover{filter:brightness(.9)}html[data-theme=dark] details.sd-dropdown summary.sd-card-header:hover{filter:brightness(1.1)}details.sd-dropdown summary.sd-card-header:focus:focus-visible{border-radius:.1875rem;outline:var(--pst-color-accent) solid .1875rem;outline-offset:.125rem}details.sd-dropdown[open] summary.sd-card-header:focus:focus-visible{border-bottom-left-radius:0;border-bottom-right-radius:0}html .sd-btn{min-width:2.25rem;padding:.3125rem .75rem .4375rem}html .sd-btn:hover{color:var(--pst-color-link-hover);text-decoration:underline;text-decoration-skip-ink:none;text-decoration-thickness:max(1px,.0625rem);text-decoration-thickness:max(3px,.1875rem,.12em);text-decoration-thickness:1px;text-underline-offset:.1578em}html .sd-btn-primary:hover{color:var(--pst-color-primary-highlight-text)!important}html .sd-btn-secondary:hover{color:var(--pst-color-secondary-highlight-text)!important}html .sd-btn-success:hover{color:var(--pst-color-success-highlight-text)!important}html .sd-btn-info:hover{color:var(--pst-color-info-highlight-text)!important}html .sd-btn-warning:hover{color:var(--pst-color-warning-highlight-text)!important}html .sd-btn-danger:hover{color:var(--pst-color-danger-highlight-text)!important}html .sd-btn-light:hover{color:var(--pst-color-light-highlight-text)!important}html .sd-btn-muted:hover{color:var(--pst-color-muted-highlight-text)!important}html .sd-btn-dark:hover{color:var(--pst-color-dark-highlight-text)!important}html .sd-btn-black:hover{color:var(--pst-color-black-highlight-text)!important}html .sd-btn-white:hover{color:var(--pst-color-white-highlight-text)!important}html .sd-btn-outline-primary:focus-visible,html .sd-btn-primary:focus-visible{background-color:var(--sd-color-primary)!important;border-color:var(--sd-color-primary)!important;border-radius:.1875rem;outline:var(--sd-color-primary) solid .1875rem;outline-offset:.125rem}html .sd-btn-outline-secondary:focus-visible,html .sd-btn-secondary:focus-visible{background-color:var(--sd-color-secondary)!important;border-color:var(--sd-color-secondary)!important;border-radius:.1875rem;outline:var(--sd-color-secondary) solid .1875rem;outline-offset:.125rem}html .sd-btn-outline-success:focus-visible,html .sd-btn-success:focus-visible{background-color:var(--sd-color-success)!important;border-color:var(--sd-color-success)!important;border-radius:.1875rem;outline:var(--sd-color-success) solid .1875rem;outline-offset:.125rem}html .sd-btn-info:focus-visible,html .sd-btn-outline-info:focus-visible{background-color:var(--sd-color-info)!important;border-color:var(--sd-color-info)!important;border-radius:.1875rem;outline:var(--sd-color-info) solid .1875rem;outline-offset:.125rem}html .sd-btn-outline-warning:focus-visible,html .sd-btn-warning:focus-visible{background-color:var(--sd-color-warning)!important;border-color:var(--sd-color-warning)!important;border-radius:.1875rem;outline:var(--sd-color-warning) solid .1875rem;outline-offset:.125rem}html .sd-btn-danger:focus-visible,html .sd-btn-outline-danger:focus-visible{background-color:var(--sd-color-danger)!important;border-color:var(--sd-color-danger)!important;border-radius:.1875rem;outline:var(--sd-color-danger) solid .1875rem;outline-offset:.125rem}html .sd-btn-light:focus-visible,html .sd-btn-outline-light:focus-visible{background-color:var(--sd-color-light)!important;border-color:var(--sd-color-light)!important;border-radius:.1875rem;outline:var(--sd-color-light) solid .1875rem;outline-offset:.125rem}html .sd-btn-muted:focus-visible,html .sd-btn-outline-muted:focus-visible{background-color:var(--sd-color-muted)!important;border-color:var(--sd-color-muted)!important;border-radius:.1875rem;outline:var(--sd-color-muted) solid .1875rem;outline-offset:.125rem}html .sd-btn-dark:focus-visible,html .sd-btn-outline-dark:focus-visible{background-color:var(--sd-color-dark)!important;border-color:var(--sd-color-dark)!important;border-radius:.1875rem;outline:var(--sd-color-dark) solid .1875rem;outline-offset:.125rem}html .sd-btn-black:focus-visible,html .sd-btn-outline-black:focus-visible{background-color:var(--sd-color-black)!important;border-color:var(--sd-color-black)!important;border-radius:.1875rem;outline:var(--sd-color-black) solid .1875rem;outline-offset:.125rem}html .sd-btn-outline-white:focus-visible,html .sd-btn-white:focus-visible{background-color:var(--sd-color-white)!important;border-color:var(--sd-color-white)!important;border-radius:.1875rem;outline:var(--sd-color-white) solid .1875rem;outline-offset:.125rem}.bd-content .dropdown.admonition.toggle .admonition-title:hover .tb-icon{opacity:1;scale:1.1}.bd-content .dropdown.admonition.toggle .admonition-title .tb-icon{opacity:.6}.bd-content .dropdown.admonition.toggle .admonition-title:hover{filter:brightness(.9)}html[data-theme=dark] .bd-content .dropdown.admonition.toggle .admonition-title:hover{filter:brightness(1.1)}.bd-content .dropdown.admonition.toggle .admonition-title:hover{box-shadow:none}.bd-content .dropdown.admonition.toggle button.toggle-button{color:inherit}.bd-content .dropdown.admonition.toggle button.toggle-button.toggle-button-hidden .toggle-chevron-right{transform:rotate(90deg);transition:none}.bd-content .dropdown.admonition.toggle button.toggle-button .toggle-chevron-right{transform:rotate(-90deg);transition:none}.bd-content .dropdown.admonition.toggle:has(:focus-visible){overflow:visible}.bd-content .dropdown.admonition.toggle:has(:focus-visible) .admonition-title:before{border-radius:.1875rem;content:"";height:100%;left:-.2rem;outline:var(--pst-color-accent) solid .1875rem;outline-offset:.125rem;width:calc(100% + .2rem)}.bd-content .dropdown.admonition.toggle:has(:focus-visible):not(.toggle-hidden) .admonition-title:before{border-bottom-left-radius:0;border-bottom-right-radius:0}.bd-content details.toggle-details summary{border-left:3px solid var(--pst-color-primary)}.bd-content details.toggle-details summary .toggle-chevron-right{transform:rotate(90deg);transition:none}.bd-content details.toggle-details summary:hover .tb-icon{opacity:1;scale:1.1}.bd-content details.toggle-details summary .tb-icon{opacity:.6}.bd-content details.toggle-details summary:hover{filter:brightness(.9)}html[data-theme=dark] .bd-content details.toggle-details summary:hover{filter:brightness(1.1)}.bd-content details.toggle-details summary:hover{box-shadow:none}.bd-content details.toggle-details summary:focus-visible{outline-offset:.125rem}.bd-content details.toggle-details[open] .toggle-chevron-right{transform:rotate(-90deg);transition:none}.bd-content details.toggle-details[open] :focus-visible{border-bottom-left-radius:0;border-bottom-right-radius:0}html .jp-RenderedHTMLCommon,html div.rendered_html{margin:.1875rem}html .jp-RenderedHTMLCommon table,html div.rendered_html table{table-layout:auto}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe,.bd-content .nboutput .output_area.rendered_html table.dataframe{border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td~td,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td~th,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th~td,.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th~th,.bd-content .nboutput .output_area.rendered_html table.dataframe td~td,.bd-content .nboutput .output_area.rendered_html table.dataframe td~th,.bd-content .nboutput .output_area.rendered_html table.dataframe th~td,.bd-content .nboutput .output_area.rendered_html table.dataframe th~th{border-left:1px solid var(--pst-color-table-inner-border)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe thead tr,.bd-content .nboutput .output_area.rendered_html table.dataframe thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(odd),.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(2n),.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:hover,.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:hover{background-color:var(--pst-color-table-row-hover-bg)}html[data-theme=dark] .bd-content .nboutput .output_area .widget-subarea,html[data-theme=dark] .bd-content .nboutput .output_area.rendered_html:not(:has(table.dataframe)){background-color:var(--pst-color-text-base);border-radius:.25rem;color:var(--pst-color-on-background);padding:.5rem}html[data-theme=dark] .bd-content .nboutput .output_area.stderr{background-color:var(--pst-color-danger)}div.nblast.container{margin-bottom:1rem}html[data-theme=light] .nbinput.container .prompt pre{color:#005b82}html[data-theme=dark] .nbinput.container .prompt pre{color:#00e0e0}html[data-theme=light] .nboutput.container .prompt pre{color:#a12236}html[data-theme=dark] .nboutput.container .prompt pre{color:#ffa07a}div.cell_output .output{max-width:100%;overflow-x:auto}.bd-content div.cell_output table.dataframe{border:1px solid var(--pst-color-table-outer-border);color:var(--pst-color-table)}.bd-content div.cell_output table.dataframe td~td,.bd-content div.cell_output table.dataframe td~th,.bd-content div.cell_output table.dataframe th~td,.bd-content div.cell_output table.dataframe th~th{border-left:1px solid var(--pst-color-table-inner-border)}.bd-content div.cell_output table.dataframe thead tr{background-color:var(--pst-color-table-heading-bg);border-bottom:2px solid var(--pst-color-primary)}.bd-content div.cell_output table.dataframe tbody tr:nth-child(odd){background-color:var(--pst-color-table-row-zebra-low-bg)}.bd-content div.cell_output table.dataframe tbody tr:nth-child(2n){background-color:var(--pst-color-table-row-zebra-high-bg)}.bd-content div.cell_output table.dataframe tbody tr:hover{background-color:var(--pst-color-table-row-hover-bg)}html[data-theme=dark] .bd-content div.cell_output .text_html:not(:has(table.dataframe)),html[data-theme=dark] .bd-content div.cell_output .widget-subarea,html[data-theme=dark] .bd-content div.cell_output img{background-color:var(--pst-color-text-base);border-radius:.25rem;color:var(--pst-color-on-background);padding:.5rem}.bd-content div.cell_input{display:flex;flex-direction:column;justify-content:stretch}.bd-content div.cell_input,.bd-content div.output{border-radius:.25rem}.bd-content div.output table{table-layout:auto}html[data-theme=dark] .bd-content img.leaflet-tile.leaflet-tile-loaded{border-radius:0;padding:0}.bd-search-container div#search-results>.h2,.bd-search-container div#search-results>h2{font-size:var(--pst-font-size-icon);margin-top:1rem}.bd-search-container div#search-results p.search-summary{color:var(--pst-color-text-muted)}.bd-search-container ul.search{list-style:none;margin:0}.bd-search-container ul.search li{background-image:none;border-top:1px solid var(--pst-color-text-muted);margin:1rem 0;padding:1rem 0}.bd-search-container ul.search li>a{font-size:1.2em}.bd-search-container ul.search li div.context,.bd-search-container ul.search li p.context{color:var(--pst-color-text-base);margin:.5em 0 0}.bd-search-container ul.search li div.context a:before,.bd-search-container ul.search li p.context a:before{color:var(--pst-color-text-muted);content:"#";padding-right:.2em} /*# sourceMappingURL=pydata-sphinx-theme.css.map*/ \ No newline at end of file diff --git a/docs/build/html/_static/styles/pydata-sphinx-theme.css.map b/docs/build/html/_static/styles/pydata-sphinx-theme.css.map index 8537e0cd3..1142bcdf1 100644 --- a/docs/build/html/_static/styles/pydata-sphinx-theme.css.map +++ b/docs/build/html/_static/styles/pydata-sphinx-theme.css.map @@ -1 +1 @@ -{"version":3,"file":"styles/pydata-sphinx-theme.css","mappings":"AAsGE,gBCqlBF;AC1rBE;;;;EAAA,CCDF,4BASI,qQAIA,sMAIA,iKAIA,sNAIA,iRAIA,iPAIA,iRAGF,2BACA,qBAMA,yMACA,mGACA,4EAOA,gDC2OI,wBALI,CDpOR,0BACA,0BAKA,wBACA,6BACA,kBACA,6BAEA,yBACA,8BAEA,wCACA,kCACA,0BACA,kCAEA,sCACA,iCACA,yBACA,iCAGA,2BAEA,wBACA,+BACA,+BAEA,8BACA,oCAMA,wBACA,6BACA,0BAGA,sBACA,wBACA,0BACA,+CAEA,4BACA,8BACA,6BACA,2BACA,4BACA,mDACA,8BAGA,8CACA,uDACA,gDACA,uDAIA,8BACA,6BACA,2CAIA,8BACA,qCACA,gCACA,sCFFF,CI9GI,qBFyHA,wBACA,gCACA,qBACA,0BAEA,yBACA,oCAEA,2CACA,qCACA,0BACA,+BAEA,yCACA,oCACA,yBACA,8BAGE,iRAIA,iPAIA,iRAGF,2BAEA,wBACA,8BACA,gCACA,sCAEA,wBACA,6BACA,0BAEA,0BACA,kDAEA,8BACA,qCACA,gCACA,uCAlDA,iBFgDJ,CKtKA,iBAGE,qBLyKF,CK1JI,8CANJ,MAOM,sBL8JJ,CACF,CKjJA,KASE,6BAA8B,CAC9B,0CAFA,mCAFA,2BAJA,uCF6OI,kCALI,CEtOR,uCACA,uCAJA,QAAS,CAMT,oCLuJF,CK3IA,GAIE,wCAFA,aCmnB4B,CDpnB5B,cAIA,WL8IF,CKpIA,0CAOE,8BAFA,eCwjB4B,CDvjB5B,eCwjB4B,CD5jB5B,mBCwjB4B,CDzjB5B,YL2IF,CKlIA,OFuMQ,gCHjER,CG3FI,0BE3CJ,OF8MQ,gBHpEN,CACF,CKtIA,OFkMQ,+BHxDR,CGpGI,0BEtCJ,OFyMQ,cH3DN,CACF,CK1IA,OF6LQ,6BH/CR,CG7GI,0BEjCJ,OFoMQ,iBHlDN,CACF,CK9IA,OFwLQ,+BHtCR,CGtHI,0BE5BJ,OF+LQ,gBHzCN,CACF,CKlJA,OF+KM,iBHzBN,CKjJA,OF0KM,cHrBN,CK1IA,EAEE,kBCwV0B,CDzV1B,YL8IF,CKnIA,YAEE,WAAY,CADZ,gCAAiC,CAEjC,6BLsIF,CKhIA,QAEE,iBAAkB,CAClB,mBAAoB,CAFpB,kBLqIF,CK7HA,MAEE,iBLgIF,CK7HA,SAIE,kBAAmB,CADnB,YLiIF,CK7HA,wBAIE,eLgIF,CK7HA,GACE,eLgIF,CK3HA,GACE,oBACA,aL8HF,CKxHA,WACE,eL2HF,CKnHA,SAEE,kBLsHF,CK9GA,aF6EM,gBHqCN,CK3GA,WAGE,wCADA,gCADA,eLgHF,CKrGA,QF0DM,eALI,CEjDR,aAAc,CAFd,iBAAkB,CAGlB,uBLwGF,CKrGA,IAAM,aLyGN,CKxGA,IAAM,SL4GN,CKvGA,EACE,6DL2GF,CKxGE,QACE,kDL0GJ,CK/FE,4DAEE,aAAc,CACd,oBLiGJ,CK1FA,kBAIE,oCCgV4B,CHlUxB,aHgFN,CKtFA,IACE,aAAc,CFKV,gBALI,CEER,kBAAmB,CADnB,YAAa,CAEb,aL0FF,CKrFE,SAEE,aAAc,CFLZ,iBALI,CEWN,iBLuFJ,CKnFA,KAGE,oBAAqB,CADrB,2BFZI,gBHmGN,CKnFE,OACE,aLqFJ,CKjFA,IAIE,qCCy5CkC,CC9rDhC,qBFoSF,uBCy5CkC,CHj7C9B,gBALI,CE2BR,wBLwFF,CKlFE,QF5BI,aALI,CEkCN,SLqFJ,CK1EA,OACE,eL6EF,CKvEA,QAEE,qBL0EF,CKlEA,MAEE,wBAAyB,CADzB,mBLsEF,CKlEA,QAGE,+BC4Z4B,CD7Z5B,oBC2X4B,CD5X5B,iBC4X4B,CDzX5B,eLqEF,CK9DA,GAEE,kBAAmB,CACnB,+BLgEF,CK7DA,2BAQE,cAAe,CAFf,oBLkEF,CKxDA,MACE,oBL2DF,CKrDA,OAEE,eLuDF,CK/CA,iCACE,SLkDF,CK7CA,sCAME,mBAAoB,CF5HhB,iBALI,CEmIR,mBAAoB,CAHpB,QLmDF,CK5CA,cAEE,mBL+CF,CK1CA,cACE,cL6CF,CK1CA,OAGE,gBL2CF,CKxCE,gBACE,SL0CJ,CKnCA,0IACE,sBLsCF,CK9BA,gDAIE,yBLiCF,CK9BI,4GACE,cLmCN,CK5BA,mBAEE,iBAAkB,CADlB,SLgCF,CK1BA,SACE,eL6BF,CKnBA,SAIE,QAAS,CADT,QAAS,CAFT,WAAY,CACZ,SLwBF,CKdA,OACE,UAAW,CF9ML,gCEoNN,mBAAoB,CAHpB,mBCmN4B,CDpN5B,SAAU,CADV,ULqBF,CGhYI,0BEyWJ,OFtMQ,gBHiON,CACF,CKnBE,SACE,ULqBJ,CKdA,+OAOE,SLiBF,CKdA,4BACE,WLiBF,CKRA,cACE,4BAA6B,CAC7B,mBLWF,CKQA,4BACE,uBLGF,CKEA,+BACE,SLCF,CKMA,uBAEE,yBAA0B,CAD1B,YLFF,CKQA,OACE,oBLLF,CKUA,OACE,QLPF,CKcA,QAEE,cAAe,CADf,iBLVF,CKmBA,SACE,uBLhBF,CKwBA,SACE,sBLrBF,CDhjBA,MImQM,iBALI,CJ5PR,eCmjBF,CD9iBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eC+iBJ,CGhdI,0BJpGF,WIuQM,cHiTN,CACF,CDzjBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eC0jBJ,CG3dI,0BJpGF,WIuQM,gBH4TN,CACF,CDpkBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eCqkBJ,CGteI,0BJpGF,WIuQM,cHuUN,CACF,CD/kBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eCglBJ,CGjfI,0BJpGF,WIuQM,gBHkVN,CACF,CD1lBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eC2lBJ,CG5fI,0BJpGF,WIuQM,cH6VN,CACF,CDrmBE,WIgQM,iCJ5PJ,eOynBkB,CPxnBlB,eCsmBJ,CGvgBI,0BJpGF,WIuQM,gBHwWN,CACF,CDnlBA,4BS3DE,eAAgB,CADhB,cRypBF,CD1lBA,kBACE,oBC6lBF,CD3lBE,mCACE,kBC6lBJ,CDnlBA,YI8MM,gBALI,CJvMR,wBCslBF,CDllBA,YIwMM,iBALI,CJlMR,kBCslBF,CDnlBE,wBACE,eCqlBJ,CDjlBA,mBAIE,aOtFS,CHiRL,gBALI,CJxLR,kBOuTO,CPxTP,gBCulBF,CDllBE,0BACE,YColBJ,CS9qBA,0BCCE,WAAY,CAHZ,cV8rBF,CS5rBA,eAEE,kCH+jDkC,CG9jDlC,2DFGE,sCELF,cT2rBF,CS7qBA,QAEE,oBT+qBF,CS5qBA,YAEE,aAAc,CADd,mBTgrBF,CS5qBA,gBAEE,+BHkjDkC,CH3zC9B,gBHwbN,CWjtBE,mGCHA,qBACA,gBAKA,gBAAiB,CADjB,iBAAkB,CADlB,yCADA,0CADA,UZkuBF,CaxqBI,yBF5CE,yBACE,eXwtBN,CACF,Ca9qBI,yBF5CE,uCACE,eX6tBN,CACF,CanrBI,yBF5CE,qDACE,eXkuBN,CACF,CaxrBI,0BF5CE,mEACE,gBXuuBN,CACF,Ca7rBI,0BF5CE,kFACE,gBX4uBN,CACF,Cc7vBA,MAEI,oJdmwBJ,Cc9vBE,KCNA,qBACA,gBACA,YAAa,CACb,cAAe,CAIf,yCADA,0CADA,sCfywBF,CcrwBI,OCOF,aAAc,CAKd,8BAHA,cAAe,CAEf,yCADA,0CAFA,UfqwBF,CeltBM,KACE,WfqtBR,CeltBM,iBApCJ,aAAc,CACd,Uf0vBF,Ce5uBE,cACE,aAAc,CACd,Uf+uBJ,CejvBE,cACE,aAAc,CACd,SfovBJ,CetvBE,cACE,aAAc,CACd,kBfyvBJ,Ce3vBE,cACE,aAAc,CACd,Sf8vBJ,CehwBE,cACE,aAAc,CACd,SfmwBJ,CerwBE,cACE,aAAc,CACd,kBfwwBJ,CezuBM,UAhDJ,aAAc,CACd,Uf6xBF,CexuBU,OAhEN,aAAc,CACd,iBf4yBJ,Ce7uBU,OAhEN,aAAc,CACd,kBfizBJ,CelvBU,OAhEN,aAAc,CACd,SfszBJ,CevvBU,OAhEN,aAAc,CACd,kBf2zBJ,Ce5vBU,OAhEN,aAAc,CACd,kBfg0BJ,CejwBU,OAhEN,aAAc,CACd,Sfq0BJ,CetwBU,OAhEN,aAAc,CACd,kBf00BJ,Ce3wBU,OAhEN,aAAc,CACd,kBf+0BJ,CehxBU,OAhEN,aAAc,CACd,Sfo1BJ,CerxBU,QAhEN,aAAc,CACd,kBfy1BJ,Ce1xBU,QAhEN,aAAc,CACd,kBf81BJ,Ce/xBU,QAhEN,aAAc,CACd,Ufm2BJ,Ce5xBY,UAxDV,uBfw1BF,CehyBY,UAxDV,wBf41BF,CepyBY,UAxDV,efg2BF,CexyBY,UAxDV,wBfo2BF,Ce5yBY,UAxDV,wBfw2BF,CehzBY,UAxDV,ef42BF,CepzBY,UAxDV,wBfg3BF,CexzBY,UAxDV,wBfo3BF,Ce5zBY,UAxDV,efw3BF,Ceh0BY,WAxDV,wBf43BF,Cep0BY,WAxDV,wBfg4BF,Ce7zBQ,WAEE,efg0BV,Ce7zBQ,WAEE,efg0BV,Cev0BQ,WAEE,qBf00BV,Cev0BQ,WAEE,qBf00BV,Cej1BQ,WAEE,oBfo1BV,Cej1BQ,WAEE,oBfo1BV,Ce31BQ,WAEE,kBf81BV,Ce31BQ,WAEE,kBf81BV,Cer2BQ,WAEE,oBfw2BV,Cer2BQ,WAEE,oBfw2BV,Ce/2BQ,WAEE,kBfk3BV,Ce/2BQ,WAEE,kBfk3BV,Ca56BI,yBEUE,QACE,Wfs6BN,Cen6BI,oBApCJ,aAAc,CACd,Uf08BA,Ce57BA,iBACE,aAAc,CACd,Uf87BF,Ceh8BA,iBACE,aAAc,CACd,Sfk8BF,Cep8BA,iBACE,aAAc,CACd,kBfs8BF,Cex8BA,iBACE,aAAc,CACd,Sf08BF,Ce58BA,iBACE,aAAc,CACd,Sf88BF,Ceh9BA,iBACE,aAAc,CACd,kBfk9BF,Cen7BI,aAhDJ,aAAc,CACd,Ufs+BA,Cej7BQ,UAhEN,aAAc,CACd,iBfo/BF,Cer7BQ,UAhEN,aAAc,CACd,kBfw/BF,Cez7BQ,UAhEN,aAAc,CACd,Sf4/BF,Ce77BQ,UAhEN,aAAc,CACd,kBfggCF,Cej8BQ,UAhEN,aAAc,CACd,kBfogCF,Cer8BQ,UAhEN,aAAc,CACd,SfwgCF,Cez8BQ,UAhEN,aAAc,CACd,kBf4gCF,Ce78BQ,UAhEN,aAAc,CACd,kBfghCF,Cej9BQ,UAhEN,aAAc,CACd,SfohCF,Cer9BQ,WAhEN,aAAc,CACd,kBfwhCF,Cez9BQ,WAhEN,aAAc,CACd,kBf4hCF,Ce79BQ,WAhEN,aAAc,CACd,UfgiCF,Cez9BU,aAxDV,afohCA,Ce59BU,aAxDV,uBfuhCA,Ce/9BU,aAxDV,wBf0hCA,Cel+BU,aAxDV,ef6hCA,Cer+BU,aAxDV,wBfgiCA,Cex+BU,aAxDV,wBfmiCA,Ce3+BU,aAxDV,efsiCA,Ce9+BU,aAxDV,wBfyiCA,Cej/BU,aAxDV,wBf4iCA,Cep/BU,aAxDV,ef+iCA,Cev/BU,cAxDV,wBfkjCA,Ce1/BU,cAxDV,wBfqjCA,Cel/BM,iBAEE,efo/BR,Cej/BM,iBAEE,efm/BR,Ce1/BM,iBAEE,qBf4/BR,Cez/BM,iBAEE,qBf2/BR,CelgCM,iBAEE,oBfogCR,CejgCM,iBAEE,oBfmgCR,Ce1gCM,iBAEE,kBf4gCR,CezgCM,iBAEE,kBf2gCR,CelhCM,iBAEE,oBfohCR,CejhCM,iBAEE,oBfmhCR,Ce1hCM,iBAEE,kBf4hCR,CezhCM,iBAEE,kBf2hCR,CACF,CatlCI,yBEUE,QACE,Wf+kCN,Ce5kCI,oBApCJ,aAAc,CACd,UfmnCA,CermCA,iBACE,aAAc,CACd,UfumCF,CezmCA,iBACE,aAAc,CACd,Sf2mCF,Ce7mCA,iBACE,aAAc,CACd,kBf+mCF,CejnCA,iBACE,aAAc,CACd,SfmnCF,CernCA,iBACE,aAAc,CACd,SfunCF,CeznCA,iBACE,aAAc,CACd,kBf2nCF,Ce5lCI,aAhDJ,aAAc,CACd,Uf+oCA,Ce1lCQ,UAhEN,aAAc,CACd,iBf6pCF,Ce9lCQ,UAhEN,aAAc,CACd,kBfiqCF,CelmCQ,UAhEN,aAAc,CACd,SfqqCF,CetmCQ,UAhEN,aAAc,CACd,kBfyqCF,Ce1mCQ,UAhEN,aAAc,CACd,kBf6qCF,Ce9mCQ,UAhEN,aAAc,CACd,SfirCF,CelnCQ,UAhEN,aAAc,CACd,kBfqrCF,CetnCQ,UAhEN,aAAc,CACd,kBfyrCF,Ce1nCQ,UAhEN,aAAc,CACd,Sf6rCF,Ce9nCQ,WAhEN,aAAc,CACd,kBfisCF,CeloCQ,WAhEN,aAAc,CACd,kBfqsCF,CetoCQ,WAhEN,aAAc,CACd,UfysCF,CeloCU,aAxDV,af6rCA,CeroCU,aAxDV,uBfgsCA,CexoCU,aAxDV,wBfmsCA,Ce3oCU,aAxDV,efssCA,Ce9oCU,aAxDV,wBfysCA,CejpCU,aAxDV,wBf4sCA,CeppCU,aAxDV,ef+sCA,CevpCU,aAxDV,wBfktCA,Ce1pCU,aAxDV,wBfqtCA,Ce7pCU,aAxDV,efwtCA,CehqCU,cAxDV,wBf2tCA,CenqCU,cAxDV,wBf8tCA,Ce3pCM,iBAEE,ef6pCR,Ce1pCM,iBAEE,ef4pCR,CenqCM,iBAEE,qBfqqCR,CelqCM,iBAEE,qBfoqCR,Ce3qCM,iBAEE,oBf6qCR,Ce1qCM,iBAEE,oBf4qCR,CenrCM,iBAEE,kBfqrCR,CelrCM,iBAEE,kBforCR,Ce3rCM,iBAEE,oBf6rCR,Ce1rCM,iBAEE,oBf4rCR,CensCM,iBAEE,kBfqsCR,CelsCM,iBAEE,kBfosCR,CACF,Ca/vCI,yBEUE,QACE,WfwvCN,CervCI,oBApCJ,aAAc,CACd,Uf4xCA,Ce9wCA,iBACE,aAAc,CACd,UfgxCF,CelxCA,iBACE,aAAc,CACd,SfoxCF,CetxCA,iBACE,aAAc,CACd,kBfwxCF,Ce1xCA,iBACE,aAAc,CACd,Sf4xCF,Ce9xCA,iBACE,aAAc,CACd,SfgyCF,CelyCA,iBACE,aAAc,CACd,kBfoyCF,CerwCI,aAhDJ,aAAc,CACd,UfwzCA,CenwCQ,UAhEN,aAAc,CACd,iBfs0CF,CevwCQ,UAhEN,aAAc,CACd,kBf00CF,Ce3wCQ,UAhEN,aAAc,CACd,Sf80CF,Ce/wCQ,UAhEN,aAAc,CACd,kBfk1CF,CenxCQ,UAhEN,aAAc,CACd,kBfs1CF,CevxCQ,UAhEN,aAAc,CACd,Sf01CF,Ce3xCQ,UAhEN,aAAc,CACd,kBf81CF,Ce/xCQ,UAhEN,aAAc,CACd,kBfk2CF,CenyCQ,UAhEN,aAAc,CACd,Sfs2CF,CevyCQ,WAhEN,aAAc,CACd,kBf02CF,Ce3yCQ,WAhEN,aAAc,CACd,kBf82CF,Ce/yCQ,WAhEN,aAAc,CACd,Ufk3CF,Ce3yCU,aAxDV,afs2CA,Ce9yCU,aAxDV,uBfy2CA,CejzCU,aAxDV,wBf42CA,CepzCU,aAxDV,ef+2CA,CevzCU,aAxDV,wBfk3CA,Ce1zCU,aAxDV,wBfq3CA,Ce7zCU,aAxDV,efw3CA,Ceh0CU,aAxDV,wBf23CA,Cen0CU,aAxDV,wBf83CA,Cet0CU,aAxDV,efi4CA,Cez0CU,cAxDV,wBfo4CA,Ce50CU,cAxDV,wBfu4CA,Cep0CM,iBAEE,efs0CR,Cen0CM,iBAEE,efq0CR,Ce50CM,iBAEE,qBf80CR,Ce30CM,iBAEE,qBf60CR,Cep1CM,iBAEE,oBfs1CR,Cen1CM,iBAEE,oBfq1CR,Ce51CM,iBAEE,kBf81CR,Ce31CM,iBAEE,kBf61CR,Cep2CM,iBAEE,oBfs2CR,Cen2CM,iBAEE,oBfq2CR,Ce52CM,iBAEE,kBf82CR,Ce32CM,iBAEE,kBf62CR,CACF,Cax6CI,0BEUE,QACE,Wfi6CN,Ce95CI,oBApCJ,aAAc,CACd,Ufq8CA,Cev7CA,iBACE,aAAc,CACd,Ufy7CF,Ce37CA,iBACE,aAAc,CACd,Sf67CF,Ce/7CA,iBACE,aAAc,CACd,kBfi8CF,Cen8CA,iBACE,aAAc,CACd,Sfq8CF,Cev8CA,iBACE,aAAc,CACd,Sfy8CF,Ce38CA,iBACE,aAAc,CACd,kBf68CF,Ce96CI,aAhDJ,aAAc,CACd,Ufi+CA,Ce56CQ,UAhEN,aAAc,CACd,iBf++CF,Ceh7CQ,UAhEN,aAAc,CACd,kBfm/CF,Cep7CQ,UAhEN,aAAc,CACd,Sfu/CF,Cex7CQ,UAhEN,aAAc,CACd,kBf2/CF,Ce57CQ,UAhEN,aAAc,CACd,kBf+/CF,Ceh8CQ,UAhEN,aAAc,CACd,SfmgDF,Cep8CQ,UAhEN,aAAc,CACd,kBfugDF,Cex8CQ,UAhEN,aAAc,CACd,kBf2gDF,Ce58CQ,UAhEN,aAAc,CACd,Sf+gDF,Ceh9CQ,WAhEN,aAAc,CACd,kBfmhDF,Cep9CQ,WAhEN,aAAc,CACd,kBfuhDF,Cex9CQ,WAhEN,aAAc,CACd,Uf2hDF,Cep9CU,aAxDV,af+gDA,Cev9CU,aAxDV,uBfkhDA,Ce19CU,aAxDV,wBfqhDA,Ce79CU,aAxDV,efwhDA,Ceh+CU,aAxDV,wBf2hDA,Cen+CU,aAxDV,wBf8hDA,Cet+CU,aAxDV,efiiDA,Cez+CU,aAxDV,wBfoiDA,Ce5+CU,aAxDV,wBfuiDA,Ce/+CU,aAxDV,ef0iDA,Cel/CU,cAxDV,wBf6iDA,Cer/CU,cAxDV,wBfgjDA,Ce7+CM,iBAEE,ef++CR,Ce5+CM,iBAEE,ef8+CR,Cer/CM,iBAEE,qBfu/CR,Cep/CM,iBAEE,qBfs/CR,Ce7/CM,iBAEE,oBf+/CR,Ce5/CM,iBAEE,oBf8/CR,CergDM,iBAEE,kBfugDR,CepgDM,iBAEE,kBfsgDR,Ce7gDM,iBAEE,oBf+gDR,Ce5gDM,iBAEE,oBf8gDR,CerhDM,iBAEE,kBfuhDR,CephDM,iBAEE,kBfshDR,CACF,CajlDI,0BEUE,SACE,Wf0kDN,CevkDI,qBApCJ,aAAc,CACd,Uf8mDA,CehmDA,kBACE,aAAc,CACd,UfkmDF,CepmDA,kBACE,aAAc,CACd,SfsmDF,CexmDA,kBACE,aAAc,CACd,kBf0mDF,Ce5mDA,kBACE,aAAc,CACd,Sf8mDF,CehnDA,kBACE,aAAc,CACd,SfknDF,CepnDA,kBACE,aAAc,CACd,kBfsnDF,CevlDI,cAhDJ,aAAc,CACd,Uf0oDA,CerlDQ,WAhEN,aAAc,CACd,iBfwpDF,CezlDQ,WAhEN,aAAc,CACd,kBf4pDF,Ce7lDQ,WAhEN,aAAc,CACd,SfgqDF,CejmDQ,WAhEN,aAAc,CACd,kBfoqDF,CermDQ,WAhEN,aAAc,CACd,kBfwqDF,CezmDQ,WAhEN,aAAc,CACd,Sf4qDF,Ce7mDQ,WAhEN,aAAc,CACd,kBfgrDF,CejnDQ,WAhEN,aAAc,CACd,kBforDF,CernDQ,WAhEN,aAAc,CACd,SfwrDF,CeznDQ,YAhEN,aAAc,CACd,kBf4rDF,Ce7nDQ,YAhEN,aAAc,CACd,kBfgsDF,CejoDQ,YAhEN,aAAc,CACd,UfosDF,Ce7nDU,cAxDV,afwrDA,CehoDU,cAxDV,uBf2rDA,CenoDU,cAxDV,wBf8rDA,CetoDU,cAxDV,efisDA,CezoDU,cAxDV,wBfosDA,Ce5oDU,cAxDV,wBfusDA,Ce/oDU,cAxDV,ef0sDA,CelpDU,cAxDV,wBf6sDA,CerpDU,cAxDV,wBfgtDA,CexpDU,cAxDV,efmtDA,Ce3pDU,eAxDV,wBfstDA,Ce9pDU,eAxDV,wBfytDA,CetpDM,mBAEE,efwpDR,CerpDM,mBAEE,efupDR,Ce9pDM,mBAEE,qBfgqDR,Ce7pDM,mBAEE,qBf+pDR,CetqDM,mBAEE,oBfwqDR,CerqDM,mBAEE,oBfuqDR,Ce9qDM,mBAEE,kBfgrDR,Ce7qDM,mBAEE,kBf+qDR,CetrDM,mBAEE,oBfwrDR,CerrDM,mBAEE,oBfurDR,Ce9rDM,mBAEE,kBfgsDR,Ce7rDM,mBAEE,kBf+rDR,CACF,CgBrzDA,OAEE,8BACA,2BACA,+BACA,4BAEA,0CACA,gCACA,+CACA,iCACA,kDACA,8DACA,iDACA,4DACA,gDACA,6DAKA,0CAFA,kBVkYO,CUjYP,kBVusB4B,CUzsB5B,UhBuzDF,CgB7yDE,yBAIE,oCACA,0CV+sB0B,CU9sB1B,yGAHA,mFAFA,ahBmzDJ,CgB3yDE,aACE,sBhB6yDJ,CgB1yDE,aACE,qBhB4yDJ,CgBxyDA,qBACE,+ChB2yDF,CgBpyDA,aACE,gBhBuyDF,CgB7xDE,4BACE,chBgyDJ,CgBjxDE,gCACE,qChBoxDJ,CgBjxDI,kCACE,qChBmxDN,CgB5wDE,oCACE,qBhB+wDJ,CgB5wDE,qCACE,kBhB8wDJ,CgB5vDE,kGACE,oDACA,6ChBowDJ,CgB5vDA,cACE,oDACA,6ChB+vDF,CgBvvDE,8BACE,mDACA,4ChB0vDJ,CiBt4DE,eAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjBq4DJ,CiBp5DE,gCAkBE,0CADA,2BjBi5DJ,CiBl6DE,iBAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjBm5DJ,CiBl6DE,eAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjBi6DJ,CiBh7DE,2BAkBE,0CADA,2BjB66DJ,CiB97DE,YAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjB+6DJ,CiB97DE,eAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjB67DJ,CiB58DE,6BAkBE,0CADA,2BjBy8DJ,CiB19DE,cAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjB28DJ,CiB19DE,aAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjBy9DJ,CiBx+DE,yBAkBE,0CADA,2BjBq+DJ,CiBt/DE,YAOE,sBACA,sBACA,gCACA,8BACA,8BACA,6BACA,6BACA,4BACA,2BjBu+DJ,CgBn1DI,kBAEE,gCAAiC,CADjC,ehBu1DN,Caj7DI,4BGyFA,qBAEE,gCAAiC,CADjC,ehB61DJ,CACF,Cax7DI,4BGyFA,qBAEE,gCAAiC,CADjC,ehBm2DJ,CACF,Ca97DI,4BGyFA,qBAEE,gCAAiC,CADjC,ehBy2DJ,CACF,Cap8DI,6BGyFA,qBAEE,gCAAiC,CADjC,ehB+2DJ,CACF,Ca18DI,6BGyFA,sBAEE,gCAAiC,CADjC,ehBq3DJ,CACF,CkBxhEA,YACE,mBlB0hEF,CkBjhEA,gBfiRM,iBALI,CerQR,eZ+lB4B,CYnmB5B,eAAgB,CADhB,sDADA,kDlBwhEF,CkB9gEA,mBfsQM,iBALI,Ce/PR,oDADA,gDlBmhEF,CkB9gEA,mBfgQM,iBALI,CezPR,qDADA,iDlBmhEF,CmB/iEA,WAKE,+Bb+1BsC,CHzkBlC,gBALI,CgBrRR,iBnBojEF,CoBrjEA,cASE,eAAgB,CAEhB,2BAA4B,CAD5B,kCdq3BsC,Ccn3BtC,2DbGE,sCaPF,0Bd43BsC,Ccn4BtC,aAAc,CjB0RV,cALI,CiBhRR,edkmB4B,CcjmB5B,edymB4B,Cc7mB5B,uBCSI,oEDMJ,CAhBA,UpBmkEF,CqBrjEM,uCDhBN,cCiBQ,erBwjEN,CACF,CoBtjEE,yBACE,epBwjEJ,CoBtjEI,wDACE,cpBwjEN,CoBnjEE,oBAEE,kCdg2BoC,Cc/1BpC,oBd82BoC,Ccx2BlC,4CdkhBkB,Cc1hBpB,0Bds2BoC,Ccn2BpC,SpBsjEJ,CoB7iEE,2CAYE,aAKA,QAAS,CAXT,cpB4iEJ,CoB5hEE,qCACE,aAAc,CACd,SpB8hEJ,CoB1hEE,2BACE,+Bd40BoC,Cc10BpC,SpB2hEJ,CoBnhEE,uBAEE,uCd8yBoC,Cc3yBpC,SpBkhEJ,CoB9gEE,oCE1FA,sChBqiCgC,Ccl8B9B,cAAe,CAFf,oBAAqB,CAGrB,8CdgsB0B,Cc/rB1B,eAAgB,CAPhB,0BdsyBoC,CcxyBpC,wBACA,wBdorB0B,CctrB1B,uBAKA,mBAAoB,CCpFlB,6HrB0mEN,CqBtmEM,uCD0EJ,oCCzEM,erBymEN,CACF,CoBlhEE,yEACE,uCpBohEJ,CoB3gEA,wBAOE,4BAA6B,CAC7B,wBAAyB,CACzB,sCAHA,0Bd2xBsC,CchyBtC,aAAc,CAId,edwf4B,Cczf5B,eAAgB,CADhB,kBADA,UpBqhEF,CoB5gEE,8BACE,SpB8gEJ,CoB3gEE,gFAGE,cAAe,CADf,epB6gEJ,CoBjgEA,iBbjII,yCJ4QE,iBALI,CiBrIR,yDd4wBsC,Cc3wBtC,oBpBsgEF,CoBlgEE,uCAEE,sBACA,uBdooB0B,CctoB1B,oBpBsgEJ,CoBhgEA,iBb9II,yCJ4QE,iBALI,CiBxHR,wDdgwBsC,Cc/vBtC,kBpBqgEF,CoBjgEE,uCAEE,oBACA,sBd2nB0B,Cc7nB1B,kBpBqgEJ,CoB3/DE,sBACE,0DpB8/DJ,CoB3/DE,yBACE,yDpB6/DJ,CoB1/DE,yBACE,wDpB4/DJ,CoBv/DA,oBAEE,sDd8tBsC,Cc7tBtC,edilB4B,CcnlB5B,UpB4/DF,CoBx/DE,mDACE,cpB0/DJ,CoBv/DE,uCACE,kBAAoB,CbvLpB,qCPirEJ,CoBt/DE,0CACE,kBAAoB,Cb5LpB,qCPqrEJ,CoBr/DE,oCAAoB,qDpBw/DtB,CoBv/DE,oCAAoB,oDpB0/DtB,CuBzsEA,aACE,sQAUA,eAAgB,CAChB,kCjBk3BsC,CiBj3BtC,iFAEA,uCjB+9BkC,CiBh+BlC,2BAA4B,CAE5B,yBjB+9BkC,CiB99BlC,2DhBHE,sCgBJF,0BjBy3BsC,CiBh4BtC,aAAc,CpBuRV,cALI,CoB7QR,ejB+lB4B,CiB9lB5B,ejBsmB4B,CiB1mB5B,uCFMI,oEESJ,CAhBA,UvBytEF,CqB9sEM,uCEfN,aFgBQ,erBitEN,CACF,CuB5sEE,mBACE,oBjBs3BoC,CiBh3BlC,4CjBi+B4B,CiBt+B9B,SvB+sEJ,CuBtsEE,0DAGE,qBAAsB,CADtB,oBvBwsEJ,CuBpsEE,sBAEE,uCvBqsEJ,CuBhsEE,4BACE,iBAAkB,CAClB,sCvBksEJ,CuB9rEA,gBhBtCI,yCJ4QE,iBALI,CoB/NR,qBjBquB4B,CiBpuB5B,kBjBquB4B,CiBvuB5B,kBvBqsEF,CuB9rEA,gBhB9CI,yCJ4QE,iBALI,CoBvNR,oBjBiuB4B,CiBhuB5B,iBjBiuB4B,CiBnuB5B,iBvBqsEF,CuB5rEI,kCACE,qQvB+rEN,CwBvwEA,YACE,aAAc,CAGd,qBlBq6BwC,CkBv6BxC,iBlBq6BwC,CkBp6BxC,kBxB2wEF,CwBxwEE,8BACE,UAAW,CACX,kBxB0wEJ,CwBtwEA,oBAEE,cAAe,CADf,mBlB25BwC,CkBz5BxC,gBxBywEF,CwBvwEE,sCACE,WAAY,CAEZ,aAAc,CADd,mBxB0wEJ,CwBrwEA,kBACE,qCAOA,eAAgB,CAChB,yCACA,+CAEA,uBAA2B,CAD3B,2BAA4B,CAE5B,uBAAwB,CACxB,0DlB24BwC,CkBt5BxC,aAAc,CAEd,UlBy4BwC,CkBx4BxC,iBASA,wBAAyB,CARzB,kBAAmB,CAHnB,SxBkxEF,CwBpwEE,iCjB3BE,mBPkyEJ,CwBnwEE,8BAEE,iBxBowEJ,CwBjwEE,yBACE,sBxBmwEJ,CwBhwEE,wBACE,oBlBs1BoC,CkBp1BpC,4ClB8foB,CkB/fpB,SxBmwEJ,CwB/vEE,0BACE,wBlB5BM,CkB6BN,oBxBiwEJ,CwB/vEI,yCAII,oQxB8vER,CwB1vEI,sCAII,4KxByvER,CwBpvEE,+CAOI,+PANF,wBlBjDM,CkBkDN,oBxBuvEJ,CwB9uEE,2BAEE,WAAY,CACZ,UlBk2BuC,CkBp2BvC,mBxBkvEJ,CwBzuEI,2FACE,cAAe,CACf,UxB2uEN,CwB7tEA,aACE,kBxBguEF,CwB9tEE,+BACE,qLAIA,0CACA,qBAAgC,CjBjHhC,kBiB+GA,mBHlHE,+CGsHF,CALA,SxBouEJ,CqBj1EM,uCG0GJ,+BHzGM,erBo1EN,CACF,CwBluEI,qCACE,0KxBouEN,CwBjuEI,uCAMI,wKALF,wBxBouEN,CwB1tEE,gCAEE,cAAe,CADf,mBxB6tEJ,CwB1tEI,kDAEE,aAAc,CADd,mBxB6tEN,CwBvtEA,mBACE,oBAAqB,CACrB,iBxB0tEF,CwBvtEA,WAEE,kBAAsB,CACtB,mBAAoB,CAFpB,iBxB4tEF,CwBttEI,mDAEE,WAAY,CACZ,WlBspBwB,CkBxpBxB,mBxB0tEN,CwBjtEI,8EACE,0LxBotEN,CyBv4EA,YAIE,eAAgB,CAChB,4BAA6B,CAH7B,cACA,SAAU,CAFV,UzB84EF,CyBx4EE,kBACE,SzB04EJ,CyBt4EI,wCAA0B,2DzBy4E9B,CyBx4EI,oCAA0B,2DzB24E9B,CyBx4EE,8BACE,QzB04EJ,CyBv4EE,kCAIE,eAAgB,CH1BlB,wBhBkCQ,CmBNN,QnB6/BuC,CC1gCvC,mBkBSA,WnB8/BuC,CmB7/BvC,mBJbE,sGImBF,CARA,UzBg5EJ,CqBv5EM,uCIMJ,kCJLM,erB05EN,CACF,CyB34EI,yCHjCF,wBtB+6EF,CyBz4EE,2CAKE,uCnBu+B8B,CmBt+B9B,wBAAyB,ClB7BzB,mBkB0BA,iBAAkB,CAClB,cnBu+B8B,CmBz+B9B,YnBw+B8B,CmBz+B9B,UzBi5EJ,CyBv4EE,8BAGE,eAAgB,CHpDlB,wBhBkCQ,CmBoBN,QnBm+BuC,CC1gCvC,mBkBoCA,WnBm+BuC,Ce1gCrC,sGI6CF,CAPA,UzB+4EJ,CqBj7EM,uCIiCJ,8BJhCM,erBo7EN,CACF,CyB34EI,qCH3DF,wBtBy8EF,CyBz4EE,8BAKE,uCnB68B8B,CmB58B9B,wBAAyB,ClBvDzB,mBkBoDA,iBAAkB,CAClB,cnB68B8B,CmB/8B9B,YnB88B8B,CmB/8B9B,UzBi5EJ,CyBv4EE,qBACE,mBzBy4EJ,CyBv4EI,2CACE,0CzBy4EN,CyBt4EI,uCACE,0CzBw4EN,C0B/9EA,eACE,iB1Bk+EF,C0Bh+EE,gGAGE,8CpBwiCoC,CoBtiCpC,gBpBuiCoC,CoBxiCpC,kD1Bm+EJ,C0B/9EE,qBAYE,gDAPA,WAAY,CAFZ,MAAO,CAIP,eAAgB,CADhB,oBAKA,mBAAoB,CAVpB,iBAAkB,CAOlB,gBAAiB,CACjB,sBAAuB,CAPvB,KAAM,CAWN,oBAAqB,CLRnB,4DKSF,CAJA,kBAAmB,CANnB,S1B2+EJ,CqBt+EM,uCKTJ,qBLUM,erBy+EN,CACF,C0Bn+EE,oEAEE,mB1Bq+EJ,C0Bn+EI,8FACE,iB1Bs+EN,C0Bn+EI,oMAGE,sBpB4gCkC,CoB7gClC,oB1Bu+EN,C0Bn+EI,sGAEE,sBpBugCkC,CoBxgClC,oB1Bu+EN,C0Bl+EE,4BAEE,sBpBigCoC,CoBlgCpC,oB1Bq+EJ,C0B79EI,mLACE,yCACA,0D1Bk+EN,C0Bh+EM,2MAME,kCpBg0BgC,CCh3BpC,sCmB+CI,UAAW,CADX,YpBm/BgC,CoBr/BhC,mBADA,iBAAkB,CAElB,U1By+ER,C0B/9EI,oDACE,yCACA,0D1Bi+EN,C0B59EI,6CACE,qC1B89EN,C0B19EE,2EAEE,a1B49EJ,C0B19EI,uFACE,uC1B69EN,C2BpjFA,aAIE,mBAAoB,CAFpB,YAAa,CACb,cAAe,CAFf,iBAAkB,CAIlB,U3BujFF,C2BrjFE,iFAIE,aAAc,CAEd,WAAY,CAHZ,iBAAkB,CAElB,Q3BwjFJ,C2BnjFE,0GAGE,S3BqjFJ,C2B/iFE,kBACE,iBAAkB,CAClB,S3BijFJ,C2B/iFI,wBACE,S3BijFN,C2BtiFA,kBAEE,kBAAmB,CAQnB,sCrB06BsC,CqBz6BtC,2DpBtCE,sCoBkCF,0BrBm1BsC,CqBz1BtC,YAAa,CxBgPT,cALI,CwBvOR,erByjB4B,CqBxjB5B,erBgkB4B,CqBnkB5B,uBAKA,iBAAkB,CAClB,kB3B4iFF,C2BhiFA,kHpBhDI,yCJ4QE,iBALI,CwBnNR,kB3BqiFF,C2BhiFA,kHpBzDI,yCJ4QE,iBALI,CwB1MR,oB3BqiFF,C2BhiFA,0DAEE,kB3BmiFF,C2B7gFI,iqBpBzEA,6BADA,yBPsmFJ,C2B/gFE,0IpBxEE,4BADA,yBoB0EA,2C3BmhFJ,C2B/gFE,uHpB7EE,4BADA,wBPkmFJ,C4BznFE,gBAME,gCtBkjCqB,CsBvjCrB,YAAa,CzBoQX,gBALI,CyB7PN,iBtBu0BoC,CsBx0BpC,U5B+nFJ,C4BxnFE,eAWE,kCtBoiCqB,CC/jCrB,sCqB0BA,UtBqiCqB,CsB3iCrB,YAAa,CzBwPX,iBALI,CyBhPN,iBAFA,cAAe,CACf,qBALA,iBAAkB,CAClB,QAAS,CACT,S5BmoFJ,C4BtnFI,8HAEE,a5B2nFN,C4B1qFI,0DAyDI,yQAEA,yDADA,2BAA4B,CAE5B,4DAPF,8CtBuhCmB,CsBphCjB,kC5B2nFR,C4BpnFM,sEACE,8CtB4gCiB,CsBvgCf,uD5BknFV,C4BvrFI,0EAgFI,8EADA,kC5B6mFR,C4B5rFI,wDAuFE,8C5BymFN,C4BtmFQ,4NAEE,iRAEA,6DACA,sEAFA,sB5BymFV,C4BnmFM,oEACE,8CtBw+BiB,CsBn+Bf,uD5BimFV,C4B1sFI,sEAkHI,2B5B4lFR,C4B9sFI,kEAyHE,8C5BylFN,C4BvlFM,kFACE,2C5BylFR,C4BtlFM,8EACE,uD5BwlFR,C4BrlFM,sGACE,gC5BulFR,C4BllFI,qDACE,gB5BqlFN,C4B/tFI,kVAoJM,S5BmlFV,C4BntFE,kBAME,kCtBkjCqB,CsBvjCrB,YAAa,CzBoQX,gBALI,CyB7PN,iBtBu0BoC,CsBx0BpC,U5BytFJ,C4BltFE,iBAWE,iCtBoiCqB,CC/jCrB,sCqB0BA,UtBqiCqB,CsB3iCrB,YAAa,CzBwPX,iBALI,CyBhPN,iBAFA,cAAe,CACf,qBALA,iBAAkB,CAClB,QAAS,CACT,S5B6tFJ,C4BhtFI,8IAEE,a5BqtFN,C4BpwFI,8DAyDI,sUAEA,yDADA,2BAA4B,CAE5B,4DAPF,gDtBuhCmB,CsBphCjB,kC5BqtFR,C4B9sFM,0EACE,gDtB4gCiB,CsBvgCf,sD5B4sFV,C4BjxFI,8EAgFI,8EADA,kC5BusFR,C4BtxFI,4DAuFE,gD5BmsFN,C4BhsFQ,oOAEE,8UAEA,6DACA,sEAFA,sB5BmsFV,C4B7rFM,wEACE,gDtBw+BiB,CsBn+Bf,sD5B2rFV,C4BpyFI,0EAkHI,2B5BsrFR,C4BxyFI,sEAyHE,gD5BmrFN,C4BjrFM,sFACE,6C5BmrFR,C4BhrFM,kFACE,sD5BkrFR,C4B/qFM,0GACE,kC5BirFR,C4B5qFI,uDACE,gB5B+qFN,C4BzzFI,8VAsJM,S5B2qFV,C6Bn0FA,KAEE,2BACA,4BACA,uB1BuRI,uBALI,C0BhRR,yBACA,yBACA,oCACA,wBACA,6CACA,kCACA,+CACA,wCACA,iFACA,+BACA,gFPhBA,iCOkCqB,CAFrB,mEtBjBE,0CsBUF,0BAKA,eAXA,oBAAqB,CAErB,sC1BsQI,iCALI,C0B/PR,sCACA,sCAJA,wDAMA,iBAAkB,CAClB,qBRfI,6HQwBJ,CALA,gBAAiB,CAFjB,qB7Bw0FF,CqBr1FM,uCQhBN,KRiBQ,erBw1FN,CACF,C6Bp0FE,WAGE,wCACA,8CAHA,+B7Bw0FJ,C6Bl0FE,sBAGE,kCACA,wCAFA,yB7Bq0FJ,C6Bh0FE,mBPpDA,uCOsDuB,CACrB,8CAME,0CARF,gCAGA,S7Bm0FJ,C6B1zFE,8BACE,8CAME,0CALF,S7B6zFJ,C6BpzFE,mGAME,yCAGA,+CAJA,gC7BozFJ,C6B7yFI,yKAKI,yC7B2yFR,C6BtyFE,sCAKI,yC7BoyFN,C6BhyFE,mDAKE,2CAEA,iDAJA,mCAKA,uCAJA,mB7BmyFJ,C6BnxFE,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9Bs4FF,C6BpyFE,eC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9Bu5FF,C6BrzFE,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9Bw6FF,C6Bt0FE,UC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9By7FF,C6Bv1FE,aC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9B08FF,C6Bx2FE,YC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9B29FF,C6Bz3FE,WC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9B4+FF,C6B14FE,UC/GA,oBACA,oBACA,8BACA,0BACA,0BACA,oCACA,mCACA,2BACA,2BACA,qCACA,wDACA,6BACA,6BACA,sC9B6/FF,C6Bj4FE,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9Bq/FF,C6Bl5FE,uBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9BsgGF,C6Bn6FE,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9BuhGF,C6Bp7FE,kBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,qCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9BwiGF,C6Br8FE,qBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9ByjGF,C6Bt9FE,oBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,oCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9B0kGF,C6Bv+FE,mBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,sCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9B2lGF,C6Bx/FE,kBChHA,uBACA,8BACA,0BACA,0BACA,oCACA,mCACA,2BACA,2BACA,qCACA,wDACA,gCACA,iCACA,uCACA,kB9B4mGF,C6B7/FA,UACE,yBACA,oCACA,wBACA,kCACA,gDACA,wCACA,iDACA,yCACA,gCACA,2CACA,+BACA,qCAEA,yB7B+/FF,C6Br/FE,wBACE,yB7Bu/FJ,C6Bp/FE,gBACE,+B7Bs/FJ,C6B3+FA,2BCjJE,0BACA,wB3B8NI,0BALI,C2BvNR,iD9BgoGF,C6B9+FA,2BCrJE,2BACA,0B3B8NI,2BALI,C2BvNR,iD9BuoGF,C+B1sGA,MVgBM,8BrB8rGN,CqB1rGM,uCUpBN,MVqBQ,erB6rGN,CACF,C+BhtGE,iBACE,S/BktGJ,C+B5sGE,qBACE,Y/B+sGJ,C+B3sGA,YACE,QAAS,CACT,eAAgB,CVDZ,2BrBgtGN,CqB5sGM,uCULN,YVMQ,erB+sGN,CACF,C+BjtGE,gCAEE,WAAY,CVNV,0BUOF,CAFA,O/BqtGJ,CqBttGM,uCUAJ,gCVCM,erBytGN,CACF,CgC9uGA,sEAME,iBhCivGF,CgC9uGA,iBACE,kBhCivGF,CiCztGI,uBA/BF,eAAgB,CAChB,mCAFA,oCADA,sBAqCI,UAAW,CAHX,oBAAqB,CACrB,kB3B6hBwB,C2B5hBxB,qBjCguGN,CiCvsGI,6BACE,ajCysGN,CgCvvGA,eAEE,0BACA,8BACA,0BACA,+BACA,8B7BuQI,4BALI,C6BhQR,yCACA,mCACA,8DACA,oDACA,kDACA,yFACA,4DACA,sCACA,8CACA,8CACA,oDACA,kDACA,qCACA,qCACA,2DACA,kCACA,qCACA,mCACA,oCACA,sCAcA,2BAA4B,CAD5B,uCAEA,6EzBzCE,+CyBoCF,+BALA,YAAa,C7B6OT,sCALI,C6BjOR,eAAgB,CAJhB,QAAS,CAFT,uCACA,kEAJA,iBAAkB,CAQlB,eAAgB,CAPhB,iChCmwGF,CgCpvGE,+BAEE,MAAO,CACP,qCAFA,QhCwvGJ,CgC9tGI,qBACE,mBhCiuGN,CgC/tGM,qCAEE,MAAO,CADP,UhCkuGR,CgC7tGI,mBACE,iBhCguGN,CgC9tGM,mCAEE,SAAU,CADV,OhCiuGR,Ca1wGI,yBmB4BA,wBACE,mBhCkvGJ,CgChvGI,wCAEE,MAAO,CADP,UhCmvGN,CgC9uGE,sBACE,iBhCgvGJ,CgC9uGI,sCAEE,SAAU,CADV,OhCivGN,CACF,Ca3xGI,yBmB4BA,wBACE,mBhCkwGJ,CgChwGI,wCAEE,MAAO,CADP,UhCmwGN,CgC9vGE,sBACE,iBhCgwGJ,CgC9vGI,sCAEE,SAAU,CADV,OhCiwGN,CACF,Ca3yGI,yBmB4BA,wBACE,mBhCkxGJ,CgChxGI,wCAEE,MAAO,CADP,UhCmxGN,CgC9wGE,sBACE,iBhCgxGJ,CgC9wGI,sCAEE,SAAU,CADV,OhCixGN,CACF,Ca3zGI,0BmB4BA,wBACE,mBhCkyGJ,CgChyGI,wCAEE,MAAO,CADP,UhCmyGN,CgC9xGE,sBACE,iBhCgyGJ,CgC9xGI,sCAEE,SAAU,CADV,OhCiyGN,CACF,Ca30GI,0BmB4BA,yBACE,mBhCkzGJ,CgChzGI,yCAEE,MAAO,CADP,UhCmzGN,CgC9yGE,uBACE,iBhCgzGJ,CgC9yGI,uCAEE,SAAU,CADV,OhCizGN,CACF,CgCvyGE,uCAEE,WAAY,CAEZ,wCADA,YAAa,CAFb,QhC4yGJ,CiC73GI,+BAxBF,yBACA,mCAFA,oCADA,YAAa,CA8BT,UAAW,CAHX,oBAAqB,CACrB,kB3B6hBwB,C2B5hBxB,qBjCo4GN,CiC32GI,qCACE,ajC62GN,CgC7yGE,wCAGE,SAAU,CAEV,sCADA,YAAa,CAFb,UAAW,CADX,KhCozGJ,CiCl5GI,gCAjBF,qCACA,uBAFA,cAAe,CADf,kCAuBI,UAAW,CAHX,oBAAqB,CACrB,kB3B6hBwB,C2B5hBxB,qBjCy5GN,CiCh4GI,sCACE,ajCk4GN,CgCxzGI,gCACE,gBhC0zGN,CgCpzGE,0CAGE,SAAU,CAEV,uCADA,YAAa,CAFb,UAAW,CADX,KhC2zGJ,CiC16GI,kCAIE,UAAW,CAHX,oBAAqB,CAenB,YAAa,CAdf,kB3B6hBwB,C2B5hBxB,qBjC66GN,CiC75GM,mCA7BJ,qCADA,wBADA,kCAmCM,UAAW,CAHX,oBAAqB,CACrB,mB3B0gBsB,C2BzgBtB,qBjCs6GR,CiCh6GI,wCACE,ajCk6GN,CgCv0GI,mCACE,gBhCy0GN,CgCl0GA,kBAIE,mDAHA,QAAS,CACT,6CAGA,SAAU,CAFV,ehCu0GF,CgC/zGA,eAUE,4BAA6B,CAC7B,QAAS,CzBtKP,sDyB+JF,UAAW,CAEX,oCALA,aAAc,CAId,e1Byb4B,C0B3b5B,4EAIA,kBAAmB,CACnB,qBACA,kBAAmB,CAPnB,UhC40GF,CgCh0GE,0CVxLA,iDU4LuB,CAFrB,yChCk0GJ,CgC7zGE,4CV/LA,kDUmMuB,CAFrB,2CACA,oBhC+zGJ,CgC3zGE,gDAIE,4BAA6B,CAF7B,6CACA,mBhC6zGJ,CgCtzGA,oBACE,ahCyzGF,CgCrzGA,iBAKE,sCAJA,aAAc,C7BqEV,iBALI,C6B9DR,eAAgB,CADhB,gFAIA,kBhCwzGF,CgCpzGA,oBAGE,oCAFA,aAAc,CACd,2EhCwzGF,CgCnzGA,oBAEE,4BACA,yBACA,8DACA,2BACA,iCACA,oCACA,4DACA,gDACA,qCACA,qCACA,0CACA,kChCqzGF,CkC3iHA,+BAGE,mBAAoB,CADpB,iBAAkB,CAElB,qBlC8iHF,CkC5iHE,yCAEE,aAAc,CADd,iBlCgjHJ,CkC1iHE,kXAME,SlCkjHJ,CkC7iHA,aACE,YAAa,CACb,cAAe,CACf,0BlCgjHF,CkC9iHE,0BACE,UlCgjHJ,CkC5iHA,W3BhBI,qCPgkHJ,CkC5iHE,qFAEE,2ClC8iHJ,CkC1iHE,qJ3BTE,6BADA,yBP0jHJ,CkCtiHE,6G3BLE,4BADA,wBPkjHJ,CkCzhHA,uBAEE,sBADA,sBlC6hHF,CkC1hHE,wGAGE,alC0hHJ,CkCvhHE,yCACE,clCyhHJ,CkCrhHA,yEAEE,qBADA,qBlCyhHF,CkCrhHA,yEAEE,oBADA,oBlCyhHF,CkCpgHA,oBAEE,sBAAuB,CADvB,qBAAsB,CAEtB,sBlCugHF,CkCrgHE,wDAEE,UlCugHJ,CkCpgHE,4FAEE,0ClCsgHJ,CkClgHE,qH3BzFE,4BADA,4BPimHJ,CkClgHE,oF3B7GE,yBACA,yBPmnHJ,CmC3oHA,KAEE,6BACA,+BAEA,4BACA,yCACA,qDACA,uDAGA,YAAa,CACb,cAAe,CAGf,eAAgB,CADhB,eAAgB,CADhB,cnC4oHF,CmCvoHA,UAOE,eAAgB,CAChB,QAAS,CAHT,+BAJA,aAAc,ChCuQV,sCALI,CgC/PR,2CAFA,kEAIA,qBdbI,iGrB0pHN,CqBtpHM,uCcGN,UdFQ,erBypHN,CACF,CmC7oHE,gCAEE,oCnC8oHJ,CmC1oHE,wBAEE,4C7BkhBoB,C6BnhBpB,SnC6oHJ,CmCxoHE,sCAEE,wCAEA,cAAe,CADf,mBnC0oHJ,CmCjoHA,UAEE,kDACA,kDACA,oDACA,2GACA,yDACA,+CACA,uGAGA,mFnCioHF,CmC/nHE,oBAEE,yD5B7CA,wDACA,yD4B2CA,sDnCooHJ,CmChoHI,oDAIE,wDADA,iBnCioHN,CmC5nHE,8DAGE,mDACA,yDAFA,0CnCgoHJ,CmC3nHE,yB5B/DE,yBACA,0B4BgEA,mDnC8nHJ,CmCnnHA,WAEE,qDACA,sCACA,qCnCqnHF,CmClnHE,qB5B5FE,+CPitHJ,CmCjnHE,uDb/GA,mDakHuB,CADrB,2CnConHJ,CmC1mHA,eAEE,4BACA,yCACA,8DAGA,+BnC0mHF,CmCxmHE,yBAGE,qEADA,cAAe,CADf,enC4mHJ,CmCxmHI,8DAEE,gCnCymHN,CmCrmHE,+DAIE,gCAAiC,CADjC,gDADA,enCymHJ,CmC7lHE,wCAEE,aAAc,CACd,iBnCgmHJ,CmC3lHE,kDAEE,YAAa,CACb,WAAY,CACZ,iBnC8lHJ,CmCxlHE,iEACE,UnC4lHJ,CmCllHE,uBACE,YnCqlHJ,CmCnlHE,qBACE,anCqlHJ,CoClxHA,QAEE,wBACA,6BACA,0DACA,+DACA,kEACA,8DACA,sCACA,kCACA,oCACA,6DACA,mEACA,sCACA,sCACA,sCACA,sCACA,qRACA,yEACA,0DACA,wCACA,4DAMA,kBAAmB,CAFnB,YAAa,CACb,cAAe,CAEf,6BAA8B,CAC9B,8DALA,iBpCuxHF,CoC5wHE,2JAGE,kBAAmB,CAFnB,YAAa,CACb,iBAAkB,CAElB,6BpCoxHJ,CoChwHA,cAKE,mCjC0NI,0CALI,CiCvNR,+CADA,gDADA,6CAKA,qBACA,kBpCkwHF,CoChwHE,wCAEE,wCpCiwHJ,CoCvvHA,YAEE,0BACA,+BAEA,4BACA,2CACA,uDACA,6DAGA,YAAa,CACb,qBAAsB,CAGtB,eAAgB,CADhB,eAAgB,CADhB,cpCwvHF,CoCnvHI,wDAEE,mCpCovHN,CoChvHE,2BACE,epCkvHJ,CoCzuHA,aAGE,6BADA,oB9B6gCkC,C8B9gClC,iBpC8uHF,CoC1uHE,yDAGE,mCpC4uHJ,CoC/tHA,iBAKE,kBAAmB,CAJnB,eAAgB,CAChB,WpCmuHF,CoC5tHA,gBAKE,4BAA6B,CAC7B,0E7BxIE,qD6BsIF,6BjCsII,4CALI,CiClIR,aAAc,CAFd,8EftII,8CrB42HN,CqBx2HM,uCeiIN,gBfhIQ,erB22HN,CACF,CoCluHE,sBACE,oBpCouHJ,CoCjuHE,sBAGE,sDADA,SAAU,CADV,oBpCquHJ,CoC7tHA,qBAKE,kDAEA,uBAA2B,CAD3B,2BAA4B,CAE5B,oBAAqB,CAPrB,oBAAqB,CAErB,YAAa,CACb,qBAAsB,CAFtB,WpCsuHF,CoC7tHA,mBACE,wCACA,epCguHF,Ca11HI,yBuBsIA,kBAEI,gBAAiB,CACjB,0BpCutHN,CoCrtHM,8BACE,kBpCutHR,CoCrtHQ,6CACE,iBpCutHV,CoCptHQ,wCAEE,iDADA,iDpCutHV,CoCltHM,qCACE,gBpCotHR,CoCjtHM,mCACE,sBAAwB,CACxB,epCmtHR,CoChtHM,kCACE,YpCktHR,CoC/sHM,6BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCwtHR,CoC5sHQ,+CACE,YpC8sHV,CoC3sHQ,6CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpC8sHV,CACF,Ca14HI,yBuBsIA,kBAEI,gBAAiB,CACjB,0BpCswHN,CoCpwHM,8BACE,kBpCswHR,CoCpwHQ,6CACE,iBpCswHV,CoCnwHQ,wCAEE,iDADA,iDpCswHV,CoCjwHM,qCACE,gBpCmwHR,CoChwHM,mCACE,sBAAwB,CACxB,epCkwHR,CoC/vHM,kCACE,YpCiwHR,CoC9vHM,6BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCuwHR,CoC3vHQ,+CACE,YpC6vHV,CoC1vHQ,6CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpC6vHV,CACF,Caz7HI,yBuBsIA,kBAEI,gBAAiB,CACjB,0BpCqzHN,CoCnzHM,8BACE,kBpCqzHR,CoCnzHQ,6CACE,iBpCqzHV,CoClzHQ,wCAEE,iDADA,iDpCqzHV,CoChzHM,qCACE,gBpCkzHR,CoC/yHM,mCACE,sBAAwB,CACxB,epCizHR,CoC9yHM,kCACE,YpCgzHR,CoC7yHM,6BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCszHR,CoC1yHQ,+CACE,YpC4yHV,CoCzyHQ,6CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpC4yHV,CACF,Cax+HI,0BuBsIA,kBAEI,gBAAiB,CACjB,0BpCo2HN,CoCl2HM,8BACE,kBpCo2HR,CoCl2HQ,6CACE,iBpCo2HV,CoCj2HQ,wCAEE,iDADA,iDpCo2HV,CoC/1HM,qCACE,gBpCi2HR,CoC91HM,mCACE,sBAAwB,CACxB,epCg2HR,CoC71HM,kCACE,YpC+1HR,CoC51HM,6BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCq2HR,CoCz1HQ,+CACE,YpC21HV,CoCx1HQ,6CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpC21HV,CACF,CavhII,0BuBsIA,mBAEI,gBAAiB,CACjB,0BpCm5HN,CoCj5HM,+BACE,kBpCm5HR,CoCj5HQ,8CACE,iBpCm5HV,CoCh5HQ,yCAEE,iDADA,iDpCm5HV,CoC94HM,sCACE,gBpCg5HR,CoC74HM,oCACE,sBAAwB,CACxB,epC+4HR,CoC54HM,mCACE,YpC84HR,CoC34HM,8BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCo5HR,CoCx4HQ,gDACE,YpC04HV,CoCv4HQ,8CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpC04HV,CACF,CoCh8HI,eAEI,gBAAiB,CACjB,0BpCi8HR,CoC/7HQ,2BACE,kBpCi8HV,CoC/7HU,0CACE,iBpCi8HZ,CoC97HU,qCAEE,iDADA,iDpCi8HZ,CoC57HQ,kCACE,gBpC87HV,CoC37HQ,gCACE,sBAAwB,CACxB,epC67HV,CoC17HQ,+BACE,YpC47HV,CoCz7HQ,0BAQE,sCAAwC,CACxC,kBAAoB,CALpB,WAAY,CAEZ,qBAAuB,CAJvB,eAAgB,CAQhB,wBAA0B,Cf9N9B,eegOI,CALA,4BAA8B,CAF9B,oBAAsB,CAFtB,YpCk8HV,CoCt7HU,4CACE,YpCw7HZ,CoCr7HU,0CACE,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SpCw7HZ,CoCt6HA,yCAGE,sCACA,4CACA,+CACA,8BACA,6BACA,mCACA,mDpCy6HF,CoCl6HI,mFANF,uRpC46HF,CqC9rIA,MAEE,wBACA,wBACA,gCACA,wBACA,2BACA,8CACA,0DACA,gDACA,uBACA,qFACA,+BACA,6BACA,qDACA,sBACA,mBACA,kBACA,+BACA,mCACA,+BASA,oBAAqB,CAErB,0BAA2B,CAD3B,mCAEA,qE9BjBE,2C8BaF,2BAJA,YAAa,CACb,qBAAsB,CAEtB,6BADA,WAAY,CAHZ,iBrCwsIF,CqC3rIE,SAEE,aAAc,CADd,crC8rIJ,CqC1rIE,kBAEE,qBAAsB,CADtB,kBrC6rIJ,CqC1rII,8B9BrBA,0DACA,2D8BqBE,kBrC8rIN,CqC1rII,6B9BXA,6DADA,8D8BaE,qBrC8rIN,CqCvrIE,8DAEE,YrCyrIJ,CqCrrIA,WAKE,2BAFA,aAAc,CACd,uDrCurIF,CqCnrIA,YAEE,iCADA,2CrCurIF,CqCnrIA,eAGE,oCAFA,kDrCwrIF,CqCnrIA,qCAJE,erC2rIF,CqC9qIE,sBACE,mCrCirIJ,CqCzqIA,aAIE,uCACA,4EAFA,+BADA,eAAgB,CADhB,iErCgrIF,CqC1qIE,yB9B7FE,uFP0wIJ,CqCxqIA,aAGE,uCACA,yEAFA,+BADA,iErC8qIF,CqCzqIE,wB9BxGE,uFPoxIJ,CqClqIA,kBAIE,eAAgB,CAFhB,oDACA,mDAFA,mDrCwqIF,CqCnqIE,mCACE,mCACA,qCrCqqIJ,CqCjqIA,mBAEE,mDADA,mDrCqqIF,CqChqIA,kB9BpII,iD8BwIF,QAAS,CACT,MAAO,CACP,2CALA,iBAAkB,CAElB,OAAQ,CADR,KrCwqIF,CqChqIA,yCAGE,UrCmqIF,CqChqIA,wB9B3II,0DACA,0DPgzIJ,CqCjqIA,2B9BjII,6DADA,6DPyyIJ,CqC1pIE,kBACE,yCrC6pIJ,CaxxII,yBwBuHJ,YAQI,YAAa,CACb,kBrC6pIF,CqC1pIE,kBAEE,WAAY,CACZ,erC2pIJ,CqCzpII,wBAEE,aAAc,CADd,arC4pIN,CqCtpIM,mC9B1KJ,6BADA,yBPq0IF,CqCvpIQ,iGAGE,yBrCwpIV,CqCtpIQ,oGAGE,4BrCupIV,CqCnpIM,oC9B3KJ,4BADA,wBPm0IF,CqCppIQ,mGAGE,wBrCqpIV,CqCnpIQ,sGAGE,2BrCopIV,CACF,CsCz3IA,WAEE,0CACA,oCACA,0KACA,mDACA,mDACA,qDACA,0FACA,qCACA,kCACA,8CACA,6CACA,qPACA,sCACA,kDACA,8DACA,4PACA,uEACA,sCACA,mCACA,4DACA,oDtC23IF,CsCv3IA,kBAGE,kBAAmB,CAMnB,4CACA,QAAS,C/BrBP,gB+BkBF,oCALA,YAAa,CnC+PT,cALI,CmChPR,oBAAqB,CAPrB,4EAJA,iBAAkB,CAOlB,eAAgB,CjBtBZ,yCiB2BJ,CATA,UtCm4IF,CqBj5IM,uCiBUN,kBjBTQ,erBo5IN,CACF,CsC73IE,kCAEE,+CACA,gGAFA,sCtCi4IJ,CsC73II,wCACE,qDACA,gDtC+3IN,CsC13IE,wBAME,8CACA,2BAA4B,CAC5B,mDAHA,UAAW,CAJX,aAAc,CAEd,0CACA,gBAAiB,CjB7Cf,kDiBkDF,CAPA,wCtCm4IJ,CqB16IM,uCiBqCJ,wBjBpCM,erB66IN,CACF,CsC93IE,wBACE,StCg4IJ,CsC73IE,wBAGE,oDADA,SAAU,CADV,StCi4IJ,CsC33IA,kBACE,etC83IF,CsC33IA,gBAEE,wCACA,+EAFA,+BtCg4IF,CsC53IE,8B/B7DE,yDACA,yDP47IJ,CsC73II,kE/BhEA,+DACA,+DPg8IJ,CsC53IE,oCACE,YtC83IJ,CsC13IE,6B/B3DE,4DADA,4DP07IJ,CsC13IM,2E/B/DF,kEADA,kEP87IJ,CsCz3II,iD/BpEA,4DADA,4DPk8IJ,CsCv3IA,gBACE,6EtC03IF,CsCj3IE,iCAEE,aAAc,C/B9Gd,gB+B6GA,ctCs3IJ,CsCl3II,6CAAgB,YtCq3IpB,CsCp3II,4CAAe,etCu3InB,CsC52II,yM/B7HA,eP++IJ,CsC12II,6CACE,sTACA,4TtC62IN,CuCvgJA,YAEE,4BACA,4BACA,mCAEA,qBACA,gCACA,wDACA,sCACA,4DASA,yChCAE,iDgCNF,YAAa,CACb,cAAe,CpCiRX,wCALI,CoCxQR,eAAgB,CAFhB,iDADA,qEvC2gJF,CuCjgJE,kCACE,gDvCogJJ,CuClgJI,yCAGE,yCACA,yCAHA,UAAW,CACX,iDvCsgJN,CuChgJE,wBACE,4CvCkgJJ,CwCviJA,YAEE,kCACA,mCrC4RI,8BALI,CqCrRR,2CACA,qCACA,oDACA,oDACA,sDACA,uDACA,+CACA,0DACA,uDACA,gDACA,oEACA,kCACA,kCACA,4CACA,yDACA,mDACA,6DAGA,YAAa,ChCnBb,eAAgB,CADhB,cR6jJF,CwCriJA,WAOE,yCACA,iFAHA,iCAHA,aAAc,CrCiQV,wCALI,CqC3PR,sEAFA,iBAAkB,CAKlB,qBnBlBI,6HrB6jJN,CqBzjJM,uCmBQN,WnBPQ,erB4jJN,CACF,CwC3iJE,iBAIE,+CACA,qDAHA,uCADA,SxCgjJJ,CwCziJE,iBAGE,+CAEA,iDAHA,uCAEA,SlC2uCgC,CkC9uChC,SxC+iJJ,CwCxiJE,qClBnDA,+CkBuDuB,CACrB,sDAFA,wCADA,SxC4iJJ,CwCtiJE,yCAIE,kDACA,wDAHA,0CACA,mBxCyiJJ,CwCliJE,wCACE,2CxCqiJJ,CwChiJM,kCjC7BF,6DADA,yDPkkJJ,CwC9hJM,iCjCjDF,8DADA,0DPolJJ,CwCjhJA,eClGE,iCACA,kCtC0RI,iCALI,CsCnRR,wDzCunJF,CwCphJA,eCtGE,iCACA,kCtC0RI,kCALI,CsCnRR,wDzC8nJF,C0ChoJA,OAEE,4BACA,4BvCuRI,2BALI,CuChRR,2BACA,sBACA,iDnCOE,4CmCCF,4BALA,oBAAqB,CvCgRjB,mCALI,CuCxQR,wCACA,aAAc,CAHd,4DAKA,iBAAkB,CAElB,uBAAwB,CADxB,kB1CkoJF,C0C5nJE,aACE,Y1C8nJJ,C0CznJA,YACE,iBAAkB,CAClB,Q1C4nJF,C2C5pJA,OAEE,0BACA,0BACA,0BACA,8BACA,yBACA,oCACA,4EACA,iDACA,8BAOA,oCACA,8BpCHE,4CoCCF,4BADA,4CADA,4DADA,iB3CkqJF,C2CxpJA,eAEE,a3C0pJF,C2CtpJA,YAEE,iCADA,e3C0pJF,C2CjpJA,mBACE,kB3CopJF,C2CjpJE,8BAKE,qBAJA,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAEN,S3CopJJ,C2C3oJE,eACE,iDACA,0CACA,wDACA,qD3C8oJJ,C2ClpJE,iBACE,mDACA,4CACA,0DACA,uD3CqpJJ,C2CzpJE,eACE,iDACA,0CACA,wDACA,qD3C4pJJ,C2ChqJE,YACE,8CACA,uCACA,qDACA,kD3CmqJJ,C2CvqJE,eACE,iDACA,0CACA,wDACA,qD3C0qJJ,C2C9qJE,cACE,gDACA,yCACA,uDACA,oD3CirJJ,C2CrrJE,aACE,+CACA,wCACA,sDACA,mD3CwrJJ,C2C5rJE,YACE,8CACA,uCACA,qDACA,kD3C+rJJ,C4C3vJE,gCACE,GAAK,0B5C+vJP,CACF,C4C3vJA,4BAGE,0BzCkRI,+BALI,CyC3QR,wCACA,oDACA,oDACA,6BACA,6BACA,6CAOA,uCrCRE,+CqCIF,YAAa,CzCwQT,sCALI,CyClQR,iCACA,e5C6vJF,C4CtvJA,cAQE,2CAHA,mCAJA,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,eAAgB,CAEhB,iBAAkB,CvBtBd,4CuByBJ,CAFA,kB5C2vJF,CqB9wJM,uCuBYN,cvBXQ,erBixJN,CACF,C4C3vJA,sBtBAE,sKsBEA,mE5C8vJF,C4C3vJA,4BACE,gB5C8vJF,C4C3vJA,0CACE,U5C8vJF,C4C1vJE,uBACE,iD5C6vJJ,C4C1vJM,uCAJJ,uBAKM,c5C6vJN,CACF,C6CzzJA,YAEE,2CACA,qCACA,oDACA,oDACA,sDACA,oCACA,sCACA,uDACA,4DACA,sDACA,yDACA,wDACA,yDACA,8CACA,kCACA,kCACA,4CtCHE,iDsCMF,YAAa,CACb,qBAAsB,CAItB,eAAgB,CADhB,c7CyzJF,C6CpzJA,qBAEE,qBAAsB,CADtB,oB7CwzJF,C6CrzJE,6CAEE,kCAAoC,CACpC,yB7CszJJ,C6C7yJA,wBAEE,wCACA,kBAAmB,CAFnB,U7CkzJF,C6C7yJE,4DAKE,sDAFA,8CACA,oBAAqB,CAFrB,S7CizJJ,C6C3yJE,+BAEE,uDADA,8C7C8yJJ,C6CryJA,iBAME,yCACA,iFAHA,iCAFA,aAAc,CACd,gFAFA,iBAAkB,CAIlB,oB7C0yJF,C6CtyJE,6BtCvDE,+BACA,+BPg2JJ,C6CtyJE,4BtC5CE,kCADA,kCPu1JJ,C6CtyJE,oDAIE,kDAFA,0CACA,mB7CwyJJ,C6CnyJE,wBAGE,gDACA,sDAFA,wCADA,S7CwyJJ,C6CjyJE,kCACE,kB7CmyJJ,C6CjyJI,yCAEE,mDADA,qD7CoyJN,C6CtxJI,uBACE,kB7CyxJN,C6CtxJQ,qEtCvDJ,6DAZA,yBP61JJ,C6CrxJQ,qEtC5DJ,4BAZA,0DPi2JJ,C6CpxJQ,+CACE,Y7CsxJV,C6CnxJQ,yDAEE,mBAAoB,CADpB,kD7CsxJV,C6CnxJU,gEAEE,oDADA,sD7CsxJZ,Ca32JI,yBgC8DA,0BACE,kB7CizJJ,C6C9yJM,wEtCvDJ,6DAZA,yBPq3JF,C6C7yJM,wEtC5DJ,4BAZA,0DPy3JF,C6C5yJM,kDACE,Y7C8yJR,C6C3yJM,4DAEE,mBAAoB,CADpB,kD7C8yJR,C6C3yJQ,mEAEE,oDADA,sD7C8yJV,CACF,Cap4JI,yBgC8DA,0BACE,kB7Cy0JJ,C6Ct0JM,wEtCvDJ,6DAZA,yBP64JF,C6Cr0JM,wEtC5DJ,4BAZA,0DPi5JF,C6Cp0JM,kDACE,Y7Cs0JR,C6Cn0JM,4DAEE,mBAAoB,CADpB,kD7Cs0JR,C6Cn0JQ,mEAEE,oDADA,sD7Cs0JV,CACF,Ca55JI,yBgC8DA,0BACE,kB7Ci2JJ,C6C91JM,wEtCvDJ,6DAZA,yBPq6JF,C6C71JM,wEtC5DJ,4BAZA,0DPy6JF,C6C51JM,kDACE,Y7C81JR,C6C31JM,4DAEE,mBAAoB,CADpB,kD7C81JR,C6C31JQ,mEAEE,oDADA,sD7C81JV,CACF,Cap7JI,0BgC8DA,0BACE,kB7Cy3JJ,C6Ct3JM,wEtCvDJ,6DAZA,yBP67JF,C6Cr3JM,wEtC5DJ,4BAZA,0DPi8JF,C6Cp3JM,kDACE,Y7Cs3JR,C6Cn3JM,4DAEE,mBAAoB,CADpB,kD7Cs3JR,C6Cn3JQ,mEAEE,oDADA,sD7Cs3JV,CACF,Ca58JI,0BgC8DA,2BACE,kB7Ci5JJ,C6C94JM,yEtCvDJ,6DAZA,yBPq9JF,C6C74JM,yEtC5DJ,4BAZA,0DPy9JF,C6C54JM,mDACE,Y7C84JR,C6C34JM,6DAEE,mBAAoB,CADpB,kD7C84JR,C6C34JQ,oEAEE,oDADA,sD7C84JV,CACF,C6Ch4JA,kBtChJI,ePmhKJ,C6Ch4JE,mCACE,kD7Ck4JJ,C6Ch4JI,8CACE,qB7Ck4JN,C6Cr3JE,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,mE7Cw3JJ,C6Cl4JE,2BACE,wDACA,iDACA,+DACA,4DACA,kEACA,6DACA,mEACA,2DACA,4DACA,qE7Cq4JJ,C6C/4JE,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,mE7Ck5JJ,C6C55JE,sBACE,mDACA,4CACA,0DACA,4DACA,6DACA,6DACA,8DACA,sDACA,uDACA,gE7C+5JJ,C6Cz6JE,yBACE,sDACA,+CACA,6DACA,4DACA,gEACA,6DACA,iEACA,yDACA,0DACA,mE7C46JJ,C6Ct7JE,wBACE,qDACA,8CACA,4DACA,4DACA,+DACA,6DACA,gEACA,wDACA,yDACA,kE7Cy7JJ,C6Cn8JE,uBACE,oDACA,6CACA,2DACA,4DACA,8DACA,6DACA,+DACA,uDACA,wDACA,iE7Cs8JJ,C6Ch9JE,sBACE,mDACA,4CACA,0DACA,4DACA,6DACA,6DACA,8DACA,sDACA,uDACA,gE7Cm9JJ,C8C/oKA,WAEE,0BACA,oVACA,2BACA,kCACA,+DACA,+BACA,qCACA,uEAQA,wEACA,QAAS,CvCJP,sBuCFF,sBAAuB,CAEvB,UxCopD2B,CwC9oD3B,oCALA,cAFA,S9CspKF,C8C5oKE,4BAPA,+B9CwpKF,C8CjpKE,iBAGE,0CADA,oB9C+oKJ,C8C3oKE,iBAEE,4CACA,0CAFA,S9C+oKJ,C8C1oKE,wCAIE,6CAFA,mBAAoB,CACpB,gB9C4oKJ,C8C7nKI,iDATF,uC9C8oKF,C+C/rKA,OAEE,uBACA,6BACA,4BACA,0BACA,2B5CyRI,6BALI,C4ClRR,mBACA,+CACA,+CACA,2DACA,iDACA,2CACA,kDACA,sDACA,kEASA,2BAA4B,CAD5B,oCAEA,uExCPE,4CwCQF,sCALA,4B5CyQI,mCALI,C4CtQR,cAAe,CAGf,mBAAoB,CAJpB,+B/CwsKF,C+C7rKE,eACE,S/C+rKJ,C+C5rKE,kBACE,Y/C8rKJ,C+C1rKA,iBACE,uBAKA,cAAe,CACf,mBAAoB,CAJpB,iBAAkB,CAElB,iBAAkB,CADlB,8B/C+rKF,C+C1rKE,mCACE,qC/C4rKJ,C+CxrKA,cAEE,kBAAmB,CAInB,2BAA4B,CAD5B,2CAEA,qFxChCE,0FACA,2FwC4BF,mCAHA,YAAa,CAEb,2D/CisKF,C+C1rKE,yBAEE,sCADA,gD/C6rKJ,C+CxrKA,YAEE,oBAAqB,CADrB,iC/C4rKF,CgDzvKA,OAEE,uBACA,uBACA,wBACA,yBACA,mBACA,gCACA,2DACA,+CACA,oDACA,8CACA,yFACA,iCACA,iCACA,oCACA,sDACA,sDACA,iCACA,6BACA,uBACA,sDACA,sDAOA,YAAa,CAEb,WAAY,CAJZ,MAAO,CASP,SAAU,CAJV,iBAAkB,CAClB,eAAgB,CARhB,cAAe,CACf,KAAM,CAIN,UAAW,CAFX,8BhD+vKF,CgDhvKA,cAGE,8BAEA,mBAAoB,CAJpB,iBAAkB,CAClB,UhDqvKF,CgD/uKE,0BAEE,2B1Ck8CgC,Ceh/C9B,iCrB+xKN,CqB3xKM,uC2BwCJ,0B3BvCM,erB8xKN,CACF,CgDpvKE,0BACE,chDsvKJ,CgDlvKE,kCACE,qBhDovKJ,CgDhvKA,yBACE,4ChDmvKF,CgDjvKE,wCACE,eAAgB,CAChB,ehDmvKJ,CgDhvKE,qCACE,ehDkvKJ,CgD9uKA,uBAEE,kBAAmB,CADnB,YAAa,CAEb,gDhDivKF,CgD7uKA,eASE,2BAA4B,CAD5B,oCAEA,uEzCrFE,4CyCiFF,4BAJA,YAAa,CACb,qBAAsB,CAWtB,SAAU,CAPV,mBAAoB,CANpB,iBAAkB,CAGlB,UhDuvKF,CgDzuKA,gBAEE,0BACA,sBACA,0BC5GA,sCD+G4D,CChH5D,YAAa,CAHb,MAAO,CAFP,cAAe,CACf,KAAM,CAGN,WAAY,CADZ,iCjDi2KF,CiD31KE,qBAAS,SjD81KX,CiD71KE,qBAAS,kCjDg2KX,CgDhvKA,cAGE,kBAAmB,CAEnB,4FzCrGE,2DACA,4DyCgGF,YAAa,CACb,aAAc,CAEd,sChDsvKF,CgDlvKE,yBAEE,6IADA,2FhDqvKJ,CgD/uKA,aAEE,8CADA,ehDmvKF,CgD7uKA,YAIE,aAAc,CACd,gCAJA,iBhDkvKF,CgD1uKA,cAIE,kBAAmB,CAGnB,2CzCvHE,8DADA,+DyCyHF,yFAPA,YAAa,CACb,aAAc,CACd,cAAe,CAEf,wBAAyB,CACzB,qEhDivKF,CgDzuKE,gBACE,0ChD2uKJ,Cat1KI,yBmCiHF,OACE,0BACA,0ChDyuKF,CgDruKA,cAGE,gBAAiB,CADjB,iBAAkB,CADlB,+BhDyuKF,CgDpuKA,UACE,sBhDsuKF,CACF,Car2KI,yBmCmIF,oBAEE,sBhDquKF,CACF,Ca32KI,0BmC0IF,UACE,uBhDouKF,CACF,CgD3tKI,kBAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhDguKN,CgD3tKM,iCAEE,QAAS,CzCzMb,gByCwMI,WhD+tKR,CgD1tKM,gEzC7MF,eP26KJ,CgDztKM,8BACE,ehD2tKR,Car3KI,4BmCwIA,0BAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhDovKJ,CgD/uKI,yCAEE,QAAS,CzCzMb,gByCwMI,WhDmvKN,CgD9uKI,gFzC7MF,eP+7KF,CgD7uKI,sCACE,ehD+uKN,CACF,Ca14KI,4BmCwIA,0BAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhDwwKJ,CgDnwKI,yCAEE,QAAS,CzCzMb,gByCwMI,WhDuwKN,CgDlwKI,gFzC7MF,ePm9KF,CgDjwKI,sCACE,ehDmwKN,CACF,Ca95KI,4BmCwIA,0BAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhD4xKJ,CgDvxKI,yCAEE,QAAS,CzCzMb,gByCwMI,WhD2xKN,CgDtxKI,gFzC7MF,ePu+KF,CgDrxKI,sCACE,ehDuxKN,CACF,Cal7KI,6BmCwIA,0BAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhDgzKJ,CgD3yKI,yCAEE,QAAS,CzCzMb,gByCwMI,WhD+yKN,CgD1yKI,gFzC7MF,eP2/KF,CgDzyKI,sCACE,ehD2yKN,CACF,Cat8KI,6BmCwIA,2BAGE,WAAY,CACZ,QAAS,CAFT,cAAe,CADf,WhDo0KJ,CgD/zKI,0CAEE,QAAS,CzCzMb,gByCwMI,WhDm0KN,CgD9zKI,kFzC7MF,eP+gLF,CgD7zKI,uCACE,ehD+zKN,CACF,CkDriLA,SAEE,yBACA,6BACA,8BACA,+BACA,sB/CwRI,+BALI,C+CjRR,qCACA,yCACA,mDACA,yBACA,gCACA,iCAYA,oBAAqB,CARrB,aAAc,CCjBd,qC7C+lB4B,CHjUxB,qCALI,CgDvRR,iBAAkB,CAClB,e7CwmB4B,C6CjmB5B,qBAAsB,CAItB,eAAgB,CAVhB,e7C+mB4B,C4CjmB5B,gCAQA,SAAU,CCrBV,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CAGpB,kBAAmB,CADnB,iBAAkB,CAElB,mBAAoB,CDGpB,gClDujLF,CkD3iLE,cAAS,iClD8iLX,CkD5iLE,wBACE,aAAc,CAEd,sCADA,mClD+iLJ,CkD5iLI,+BAGE,wBAAyB,CACzB,kBAAmB,CAFnB,UAAW,CADX,iBlDijLN,CkDziLA,2FACE,8ClD4iLF,CkD1iLE,yGAGE,sCADA,qFADA,QlD8iLJ,CkDviLA,6FAGE,qCAFA,6CACA,oClD4iLF,CkDziLE,2GAGE,wCADA,4HADA,UlD6iLJ,CkDriLA,iGACE,2ClDyiLF,CkDviLE,+GAGE,yCADA,qFADA,WlD2iLJ,CkDpiLA,8FAGE,qCAFA,8CACA,oClDyiLF,CkDtiLE,4GAGE,uCADA,4HADA,SlD0iLJ,CkDlhLA,eAKE,sC3CjGE,8C2C+FF,8BAFA,sCACA,gEAEA,iBlDwhLF,CoD3oLA,SAEE,yBACA,6BjD4RI,+BALI,CiDrRR,kCACA,iDACA,6DACA,sDACA,2FACA,6CACA,mCACA,qCjDmRI,kCALI,CiD5QR,kCACA,8CACA,iCACA,iCACA,6CACA,8BACA,iCACA,yDAWA,oBAAqB,CAErB,2BAA4B,CAD5B,sCAEA,2E7ChBE,8C6CMF,aAAc,CDxBd,qC7C+lB4B,CHjUxB,qCALI,CgDvRR,iBAAkB,CAClB,e7CwmB4B,C6CjmB5B,qBAAsB,CAItB,eAAgB,CAVhB,e7C+mB4B,C8C1lB5B,sCDpBA,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CAGpB,kBAAmB,CADnB,iBAAkB,CAElB,mBAAoB,CCUpB,gCpDiqLF,CoDlpLE,wBACE,aAAc,CAEd,sCADA,mCpDqpLJ,CoDlpLI,6DAOE,0BAAe,CAHf,UAAW,CADX,aAAc,CADd,iBpDwpLN,CoD7oLE,2FACE,iFpDgpLJ,CoD9oLI,gNAEE,oFpD+oLN,CoD5oLI,yGAEE,gDADA,QpD+oLN,CoD3oLI,uGAEE,sCADA,qCpD8oLN,CoDtoLE,6FAGE,qCAFA,gFACA,oCpD2oLJ,CoDxoLI,oNAEE,2HpDyoLN,CoDtoLI,2GAEE,kDADA,MpDyoLN,CoDroLI,yGAEE,wCADA,mCpDwoLN,CoD/nLE,iGACE,8EpDmoLJ,CoDjoLI,4NAEE,oFpDkoLN,CoD/nLI,+GAEE,mDADA,KpDkoLN,CoD9nLI,6GAEE,yCADA,kCpDioLN,CoD3nLE,iHAQE,+EADA,UAAW,CAHX,aAAc,CADd,QAAS,CAGT,oDALA,iBAAkB,CAClB,KAAM,CAGN,mCpDgoLJ,CoDvnLE,8FAGE,qCAFA,iFACA,oCpD4nLJ,CoDznLI,sNAEE,2HpD0nLN,CoDvnLI,4GAEE,iDADA,OpD0nLN,CoDtnLI,0GAEE,uCADA,oCpDynLN,CoDjmLA,gBAKE,6CACA,kF7C5JE,6DACA,8D6CyJF,qCjDyGI,4CALI,CiDtGR,eAAgB,CADhB,6EpD4mLF,CoDpmLE,sBACE,YpDsmLJ,CoDlmLA,cAEE,mCADA,yEpDsmLF,CqD1xLA,UACE,iBrD6xLF,CqD1xLA,wBACE,kBrD6xLF,CqD1xLA,gBAGE,eAAgB,CAFhB,iBAAkB,CAClB,UrD8xLF,CsDnzLE,sBAEE,UAAW,CACX,UAAW,CAFX,atDuzLJ,CqD9xLA,eAME,0BAA2B,CAJ3B,YAAa,CACb,UAAW,CAEX,kBAAmB,CAJnB,iBAAkB,ChCbd,oCgCmBJ,CAHA,UrDoyLF,CqBhzLM,uCgCQN,ehCPQ,erBmzLN,CACF,CqDnyLA,8DAGE,arDsyLF,CqDnyLA,wEAEE,0BrDsyLF,CqDnyLA,wEAEE,2BrDsyLF,CqD7xLE,8BACE,SAAU,CAEV,cAAe,CADf,2BrDiyLJ,CqD7xLE,iJAIE,SAAU,CADV,SrDgyLJ,CqD5xLE,oFAGE,SAAU,ChC5DR,yBgC6DF,CAFA,SrDgyLJ,CqBv1LM,uCgCqDJ,oFhCpDM,erB21LN,CACF,CqD3xLA,8CAQE,kBAAmB,CAMnB,eAAgB,CAChB,QAAS,CAXT,QAAS,CAQT,U/C1FS,C+CqFT,YAAa,CAEb,sBAAuB,CAOvB,U/C6gDmC,C+ClhDnC,SAAU,CATV,iBAAkB,CAWlB,iBAAkB,CAVlB,KAAM,ChCzEF,4BgCuFJ,CAPA,S/CkhDmC,C+CvhDnC,SrDyyLF,CqBh3LM,uCgCkEN,8ChCjEQ,erBo3LN,CACF,CqDhyLE,oHAEE,U/CpGO,C+CuGP,U/CqgDiC,C+CtgDjC,SAAU,CADV,oBrDqyLJ,CqDhyLA,uBACE,MrDmyLF,CqDhyLA,uBACE,OrDmyLF,CqD9xLA,wDAME,uBAAwB,CADxB,2BAA4B,CAE5B,yBAA0B,CAL1B,oBAAqB,CAErB,W/CqgDmC,C+CtgDnC,UrDqyLF,CqD9xLA,4BACE,sRrDiyLF,CqD/xLA,4BACE,uRrDkyLF,CqD1xLA,qBAGE,QAAS,CAGT,YAAa,CACb,sBAAuB,CAHvB,MAAO,CAOP,kBAAmB,CACnB,e/Co9CmC,C+Ct9CnC,gB/Cs9CmC,C+Cx9CnC,SAAU,CAPV,iBAAkB,CAClB,OAAQ,CAGR,SrDmyLF,CqD1xLE,sCAWE,2BAA4B,CAD5B,qB/ClKO,C+CoKP,QAAS,CAGT,qCADA,kCAbA,sBAAuB,CAQvB,cAAe,CAPf,aAAc,CAEd,U/Co9CiC,C+Cj9CjC,e/Cm9CiC,C+Cp9CjC,gB/Co9CiC,C+C18CjC,U/C28CiC,C+Ct9CjC,SAAU,CAGV,kBAAmB,ChCxJjB,2BgCiKF,CAdA,UrDyyLJ,CqBx7LM,uCgC4IJ,sChC3IM,erB27LN,CACF,CqD7xLE,6BACE,SrD+xLJ,CqDtxLA,kBAGE,c/Ck8CmC,C+C97CnC,U/C7LS,C+C0LT,SAEA,sB/C87CmC,C+C/7CnC,mB/C+7CmC,C+Cn8CnC,iBAAkB,CAClB,UAMA,iBrDyxLF,CqDnxLE,sFAEE,+BrDsxLJ,CqDnxLE,qDACE,qBrDqxLJ,CqDlxLE,iCACE,UrDoxLJ,CqD9xLE,0OAEE,+BrDkyLJ,CqD/xLE,yIACE,qBrDiyLJ,CqD9xLE,iGACE,UrDgyLJ,CuDl/LA,8BAQE,6FADA,iBAAkB,CALlB,oBAAqB,CAErB,gCACA,gDAFA,6BvDy/LF,CuDh/LA,0BACE,GAAK,uBvDo/LL,CACF,CuDj/LA,gBAEE,wBACA,yBACA,qCACA,iCACA,mCACA,2CAGA,gCACA,2CAA+B,CAA/B,6DvDg/LF,CuD7+LA,mBAEE,wBACA,yBACA,+BvD++LF,CuDt+LA,wBACE,GACE,kBvDy+LF,CuDv+LA,IACE,SAAU,CACV,cvDy+LF,CACF,CuDr+LA,cAEE,wBACA,yBACA,qCACA,mCACA,yCAGA,6BAA8B,CAC9B,SvDo+LF,CuDj+LA,iBACE,wBACA,wBvDo+LF,CuDh+LE,uCACE,8BAEE,iCvDm+LJ,CACF,CwDnjMA,kFAEE,2BACA,2BACA,2BACA,8BACA,8BACA,0CACA,oCACA,mDACA,+DACA,kDACA,qDACA,oCxDojMF,Cav/LI,4B2C5CF,cAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxD+iMJ,CACF,CqBhkMM,gEmCYJ,cnCXM,erBmkMN,CACF,Ca7gMI,4B2C5BE,8BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxD8iMN,CwDziMI,4BAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxD6iMN,CwDxiMI,4BAME,sFALA,KAAM,CAMN,2BxD0iMN,CwDviMI,2DANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxDujMN,CwD/iMI,+BAKE,mFACA,0BxDyiMN,CwDtiMI,sDAEE,cxDuiMN,CwDpiMI,8DAGE,kBxDoiMN,CACF,CajkMI,yB2C/BF,cAiEM,2BACA,8BACA,sCxDmiMN,CwDjiMM,gCACE,YxDmiMR,CwDhiMM,8BAME,sCAAwC,CALxC,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SxDoiMR,CACF,CarkMI,4B2C5CF,cAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxD6nMJ,CACF,CqB9oMM,gEmCYJ,cnCXM,erBipMN,CACF,Ca3lMI,4B2C5BE,8BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxD4nMN,CwDvnMI,4BAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxD2nMN,CwDtnMI,4BAME,sFALA,KAAM,CAMN,2BxDwnMN,CwDrnMI,2DANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxDqoMN,CwD7nMI,+BAKE,mFACA,0BxDunMN,CwDpnMI,sDAEE,cxDqnMN,CwDlnMI,8DAGE,kBxDknMN,CACF,Ca/oMI,yB2C/BF,cAiEM,2BACA,8BACA,sCxDinMN,CwD/mMM,gCACE,YxDinMR,CwD9mMM,8BAME,sCAAwC,CALxC,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SxDknMR,CACF,CanpMI,4B2C5CF,cAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxD2sMJ,CACF,CqB5tMM,gEmCYJ,cnCXM,erB+tMN,CACF,CazqMI,4B2C5BE,8BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxD0sMN,CwDrsMI,4BAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxDysMN,CwDpsMI,4BAME,sFALA,KAAM,CAMN,2BxDssMN,CwDnsMI,2DANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxDmtMN,CwD3sMI,+BAKE,mFACA,0BxDqsMN,CwDlsMI,sDAEE,cxDmsMN,CwDhsMI,8DAGE,kBxDgsMN,CACF,Ca7tMI,yB2C/BF,cAiEM,2BACA,8BACA,sCxD+rMN,CwD7rMM,gCACE,YxD+rMR,CwD5rMM,8BAME,sCAAwC,CALxC,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SxDgsMR,CACF,CajuMI,6B2C5CF,cAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxDyxMJ,CACF,CqB1yMM,iEmCYJ,cnCXM,erB6yMN,CACF,CavvMI,6B2C5BE,8BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxDwxMN,CwDnxMI,4BAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxDuxMN,CwDlxMI,4BAME,sFALA,KAAM,CAMN,2BxDoxMN,CwDjxMI,2DANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxDiyMN,CwDzxMI,+BAKE,mFACA,0BxDmxMN,CwDhxMI,sDAEE,cxDixMN,CwD9wMI,8DAGE,kBxD8wMN,CACF,Ca3yMI,0B2C/BF,cAiEM,2BACA,8BACA,sCxD6wMN,CwD3wMM,gCACE,YxD6wMR,CwD1wMM,8BAME,sCAAwC,CALxC,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SxD8wMR,CACF,Ca/yMI,6B2C5CF,eAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxDu2MJ,CACF,CqBx3MM,iEmCYJ,enCXM,erB23MN,CACF,Car0MI,6B2C5BE,+BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxDs2MN,CwDj2MI,6BAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxDq2MN,CwDh2MI,6BAME,sFALA,KAAM,CAMN,2BxDk2MN,CwD/1MI,6DANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxD+2MN,CwDv2MI,gCAKE,mFACA,0BxDi2MN,CwD91MI,wDAEE,cxD+1MN,CwD51MI,iEAGE,kBxD41MN,CACF,Caz3MI,0B2C/BF,eAiEM,2BACA,8BACA,sCxD21MN,CwDz1MM,iCACE,YxD21MR,CwDx1MM,+BAME,sCAAwC,CALxC,YAAa,CACb,WAAY,CAEZ,kBAAmB,CADnB,SxD41MR,CACF,CwDz6ME,WAWI,2BAA4B,CAD5B,wCAPA,QAAS,CAKT,gCAHA,YAAa,CACb,qBAAsB,CACtB,cAAe,CAKf,SAAU,CAVV,cAAe,CnClBf,yCmC8BA,CALA,iBAAkB,CALlB,kCxDo7MN,CqBp8MM,uCmCYJ,WnCXM,erBu8MN,CACF,CwD76MM,2BAIE,qFAFA,MAAO,CADP,KAAM,CAIN,2BAA4B,CAF5B,+BxDi7MR,CwD56MM,yBAIE,oFAFA,OAAQ,CADR,KAAM,CAIN,0BAA2B,CAF3B,+BxDg7MR,CwD36MM,yBAME,sFALA,KAAM,CAMN,2BxD66MR,CwD16MM,qDANE,kCADA,MAAO,CAEP,eAAgB,CAHhB,OxD07MR,CwDl7MM,4BAKE,mFACA,0BxD46MR,CwDz6MM,gDAEE,cxD06MR,CwDv6MM,qDAGE,kBxDu6MR,CwD54MA,oBP9GE,qB3CUS,C2CXT,YAAa,CAHb,MAAO,CAFP,cAAe,CACf,KAAM,CAGN,WAAY,CADZ,YjDugNF,CiDjgNE,yBAAS,SjDogNX,CiDngNE,yBAAS,UjDsgNX,CwDx5MA,kBAEE,kBAAmB,CADnB,YAAa,CAEb,mExD25MF,CwDz5ME,6BAEE,oIADA,qFxD45MJ,CwDv5MA,iBAEE,kDADA,exD25MF,CwDv5MA,gBACE,WAAY,CAEZ,eAAgB,CADhB,mExD25MF,CyDviNA,aAKE,6BAA8B,CAD9B,WAAY,CAHZ,oBAAqB,CACrB,cAAe,CAIf,UnDgzCkC,CmDnzClC,qBzD6iNF,CyDxiNE,wBAEE,UAAW,CADX,oBzD2iNJ,CyDriNA,gBACE,ezDwiNF,CyDriNA,gBACE,ezDwiNF,CyDriNA,gBACE,gBzDwiNF,CyDniNE,+BACE,kDzDsiNJ,CyDliNA,4BACE,IACE,UzDqiNF,CACF,CyDliNA,kBAGE,6CAA8C,CAF9C,wEACA,mBzDqiNF,CyDjiNA,4BACE,GACE,qBzDoiNF,CACF,CsDnlNE,gBAEE,UAAW,CACX,UAAW,CAFX,atDulNJ,C0DxlNE,iBAEE,8EADA,oB1D4lNJ,C0D7lNE,mBAEE,gFADA,oB1DimNJ,C0DlmNE,iBAEE,8EADA,oB1DsmNJ,C0DvmNE,cAEE,2EADA,oB1D2mNJ,C0D5mNE,iBAEE,8EADA,oB1DgnNJ,C0DjnNE,gBAEE,6EADA,oB1DqnNJ,C0DtnNE,eAEE,4EADA,oB1D0nNJ,C0D3nNE,cAEE,2EADA,oB1D+nNJ,C2DhoNE,cACE,qEACA,8F3DmoNJ,C2DhoNM,wCAGE,yDACA,kF3DgoNR,C2DzoNE,gBACE,uEACA,gG3D4oNJ,C2DzoNM,4CAGE,yDACA,kF3DyoNR,C2DlpNE,cACE,qEACA,8F3DqpNJ,C2DlpNM,wCAGE,yDACA,kF3DkpNR,C2D3pNE,WACE,kEACA,2F3D8pNJ,C2D3pNM,kCAGE,0DACA,mF3D2pNR,C2DpqNE,cACE,qEACA,8F3DuqNJ,C2DpqNM,wCAGE,0DACA,mF3DoqNR,C2D7qNE,aACE,oEACA,6F3DgrNJ,C2D7qNM,sCAGE,yDACA,kF3D6qNR,C2DtrNE,YACE,mEACA,4F3DyrNJ,C2DtrNM,oCAGE,2DACA,oF3DsrNR,C2D/rNE,WACE,kEACA,2F3DksNJ,C2D/rNM,kCAGE,wDACA,iF3D+rNR,C2DxrNA,oBACE,4EACA,qG3D2rNF,C2DxrNI,oDAEE,8EACA,uG3DyrNN,C4DntNA,kBAGE,+IAFA,S5DutNF,C6DxtNA,WAGE,kBAAmB,CAGnB,0BAA2B,CAL3B,mBAAoB,CACpB,WvD6c4B,CuD3c5B,+EACA,2B7D4tNF,C6DztNE,eAIE,iBAAkB,CAHlB,aAAc,CAEd,UvDsc0B,CejcxB,oCwCHF,CAHA,S7D8tNJ,CqBptNM,uCwCZJ,exCaM,erButNN,CACF,C6DztNI,8DACE,8D7D4tNN,C8D/uNA,OACE,iBAAkB,CAClB,U9DkvNF,C8DhvNE,cAGE,UAAW,CAFX,aAAc,CACd,kC9DmvNJ,C8D/uNE,SAKE,WAAY,CAFZ,MAAO,CAFP,iBAAkB,CAClB,KAAM,CAEN,U9DkvNJ,C8D5uNE,WACE,sB9D+uNJ,C8DhvNE,WACE,qB9DmvNJ,C8DpvNE,YACE,wB9DuvNJ,C8DxvNE,YACE,gC9D2vNJ,C+DhxNA,WAEE,K/DsxNF,C+DhxNA,yBAJE,MAAO,CAHP,cAAe,CAEf,OAAQ,CAER,Y/D2xNF,C+DxxNA,cAGE,Q/DqxNF,C+D3wNI,YAEE,K/D+wNN,C+D3wNI,2BALE,eAAgB,CAEhB,Y/DoxNN,C+DjxNI,eAEE,Q/D+wNN,Ca/uNI,yBkDxCA,eACE,eAAgB,CAChB,KAAM,CACN,Y/D2xNJ,C+DxxNE,kBAEE,QAAS,CADT,eAAgB,CAEhB,Y/D0xNJ,CACF,Ca5vNI,yBkDxCA,eACE,eAAgB,CAChB,KAAM,CACN,Y/DuyNJ,C+DpyNE,kBAEE,QAAS,CADT,eAAgB,CAEhB,Y/DsyNJ,CACF,CaxwNI,yBkDxCA,eACE,eAAgB,CAChB,KAAM,CACN,Y/DmzNJ,C+DhzNE,kBAEE,QAAS,CADT,eAAgB,CAEhB,Y/DkzNJ,CACF,CapxNI,0BkDxCA,eACE,eAAgB,CAChB,KAAM,CACN,Y/D+zNJ,C+D5zNE,kBAEE,QAAS,CADT,eAAgB,CAEhB,Y/D8zNJ,CACF,CahyNI,0BkDxCA,gBACE,eAAgB,CAChB,KAAM,CACN,Y/D20NJ,C+Dx0NE,mBAEE,QAAS,CADT,eAAgB,CAEhB,Y/D00NJ,CACF,CgE12NA,QAGE,kBAAmB,CADnB,kBhE82NF,CgEz2NA,gBAHE,kBAAmB,CAHnB,YhEs3NF,CgEh3NA,QAEE,aAAc,CACd,qBhE62NF,CiEp3NA,2ECSE,4BAAiC,CAEjC,kBAAoB,CANpB,oBAAsB,CAEtB,qBAAuB,CACvB,yBAA2B,CAF3B,mBAAqB,CAIrB,4BAA8B,CAN9B,mBlE43NF,CkEl3NE,qGACE,2BlEq3NJ,CmEn4NE,sBAIE,QAAS,CAGT,UAAW,CAFX,MAAO,CAJP,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAIN,SnEu4NJ,CoE94NA,eCAE,eAAgB,CAChB,sBAAuB,CACvB,kBrEk5NF,CsEx5NA,IAEE,kBAAmB,CAGnB,6BAA8B,CAJ9B,oBAAqB,CAGrB,cAAe,CAEf,WhE2rB4B,CgE9rB5B,4BtE85NF,CuE/1NQ,gBAOI,iCvE41NZ,CuEn2NQ,WAOI,4BvEg2NZ,CuEv2NQ,cAOI,+BvEo2NZ,CuE32NQ,cAOI,+BvEw2NZ,CuE/2NQ,mBAOI,oCvE42NZ,CuEn3NQ,gBAOI,iCvEg3NZ,CuEv3NQ,aAOI,oBvEo3NZ,CuE33NQ,WAOI,qBvEw3NZ,CuE/3NQ,YAOI,oBvE43NZ,CuEn4NQ,oBAOI,4BvEg4NZ,CuEv4NQ,kBAOI,0BvEo4NZ,CuE34NQ,iBAOI,yBvEw4NZ,CuE/4NQ,kBAOI,+BvE44NZ,CuEn5NQ,iBAOI,yBvEg5NZ,CuEv5NQ,WAOI,mBvEo5NZ,CuE35NQ,YAOI,qBvEw5NZ,CuE/5NQ,YAOI,oBvE45NZ,CuEn6NQ,YAOI,qBvEg6NZ,CuEv6NQ,aAOI,mBvEo6NZ,CuE36NQ,eAOI,uBvEw6NZ,CuE/6NQ,iBAOI,yBvE46NZ,CuEn7NQ,kBAOI,0BvEg7NZ,CuEv7NQ,iBAOI,yBvEo7NZ,CuE37NQ,iBAOI,yBvEw7NZ,CuE/7NQ,mBAOI,2BvE47NZ,CuEn8NQ,oBAOI,4BvEg8NZ,CuEv8NQ,mBAOI,2BvEo8NZ,CuE38NQ,iBAOI,yBvEw8NZ,CuE/8NQ,mBAOI,2BvE48NZ,CuEn9NQ,oBAOI,4BvEg9NZ,CuEv9NQ,mBAOI,2BvEo9NZ,CuE39NQ,UAOI,wBvEw9NZ,CuE/9NQ,gBAOI,8BvE49NZ,CuEn+NQ,SAOI,uBvEg+NZ,CuEv+NQ,QAOI,sBvEo+NZ,CuE3+NQ,eAOI,6BvEw+NZ,CuE/+NQ,SAOI,uBvE4+NZ,CuEn/NQ,aAOI,2BvEg/NZ,CuEv/NQ,cAOI,4BvEo/NZ,CuE3/NQ,QAOI,sBvEw/NZ,CuE//NQ,eAOI,6BvE4/NZ,CuEngOQ,QAOI,sBvEggOZ,CuEvgOQ,QAOI,yCvEogOZ,CuE3gOQ,WAOI,4CvEwgOZ,CuE/gOQ,WAOI,4CvE4gOZ,CuEnhOQ,aAOI,yBvEghOZ,CuEjiOQ,oBACE,8EvEoiOV,CuEriOQ,sBACE,gFvEwiOV,CuEziOQ,oBACE,8EvE4iOV,CuE7iOQ,iBACE,2EvEgjOV,CuEjjOQ,oBACE,8EvEojOV,CuErjOQ,mBACE,6EvEwjOV,CuEzjOQ,kBACE,4EvE4jOV,CuE7jOQ,iBACE,2EvEgkOV,CuEvjOQ,iBAOI,yBvEojOZ,CuE3jOQ,mBAOI,2BvEwjOZ,CuE/jOQ,mBAOI,2BvE4jOZ,CuEnkOQ,gBAOI,wBvEgkOZ,CuEvkOQ,iBAOI,yBvEokOZ,CuE3kOQ,OAOI,evEwkOZ,CuE/kOQ,QAOI,iBvE4kOZ,CuEnlOQ,SAOI,kBvEglOZ,CuEvlOQ,UAOI,kBvEolOZ,CuE3lOQ,WAOI,oBvEwlOZ,CuE/lOQ,YAOI,qBvE4lOZ,CuEnmOQ,SAOI,gBvEgmOZ,CuEvmOQ,UAOI,kBvEomOZ,CuE3mOQ,WAOI,mBvEwmOZ,CuE/mOQ,OAOI,iBvE4mOZ,CuEnnOQ,QAOI,mBvEgnOZ,CuEvnOQ,SAOI,oBvEonOZ,CuE3nOQ,kBAOI,wCvEwnOZ,CuE/nOQ,oBAOI,oCvE4nOZ,CuEnoOQ,oBAOI,oCvEgoOZ,CuEvoOQ,QAOI,qFvEooOZ,CuE3oOQ,UAOI,kBvEwoOZ,CuE/oOQ,YAOI,yFvE4oOZ,CuEnpOQ,cAOI,sBvEgpOZ,CuEvpOQ,YAOI,2FvEopOZ,CuE3pOQ,cAOI,wBvEwpOZ,CuE/pOQ,eAOI,4FvE4pOZ,CuEnqOQ,iBAOI,yBvEgqOZ,CuEvqOQ,cAOI,0FvEoqOZ,CuE3qOQ,gBAOI,uBvEwqOZ,CuE/qOQ,gBAIQ,sBAGJ,2EvE6qOZ,CuEprOQ,kBAIQ,sBAGJ,6EvEkrOZ,CuEzrOQ,gBAIQ,sBAGJ,2EvEurOZ,CuE9rOQ,aAIQ,sBAGJ,wEvE4rOZ,CuEnsOQ,gBAIQ,sBAGJ,2EvEisOZ,CuExsOQ,eAIQ,sBAGJ,0EvEssOZ,CuE7sOQ,cAIQ,sBAGJ,yEvE2sOZ,CuEltOQ,aAIQ,sBAGJ,wEvEgtOZ,CuEvtOQ,cAIQ,sBAGJ,yEvEqtOZ,CuE5tOQ,cAIQ,sBAGJ,yEvE0tOZ,CuEjuOQ,uBAOI,sDvE8tOZ,CuEruOQ,yBAOI,wDvEkuOZ,CuEzuOQ,uBAOI,sDvEsuOZ,CuE7uOQ,oBAOI,mDvE0uOZ,CuEjvOQ,uBAOI,sDvE8uOZ,CuErvOQ,sBAOI,qDvEkvOZ,CuEzvOQ,qBAOI,oDvEsvOZ,CuE7vOQ,oBAOI,mDvE0vOZ,CuEjwOQ,UAOI,0BvE8vOZ,CuErwOQ,UAOI,0BvEkwOZ,CuEzwOQ,UAOI,0BvEswOZ,CuE7wOQ,UAOI,0BvE0wOZ,CuEjxOQ,UAOI,0BvE8wOZ,CuE/xOQ,mBACE,uBvEkyOV,CuEnyOQ,mBACE,wBvEsyOV,CuEvyOQ,mBACE,uBvE0yOV,CuE3yOQ,mBACE,wBvE8yOV,CuE/yOQ,oBACE,qBvEkzOV,CuEzyOQ,MAOI,mBvEsyOZ,CuE7yOQ,MAOI,mBvE0yOZ,CuEjzOQ,MAOI,mBvE8yOZ,CuErzOQ,OAOI,oBvEkzOZ,CuEzzOQ,QAOI,oBvEszOZ,CuE7zOQ,QAOI,wBvE0zOZ,CuEj0OQ,QAOI,qBvE8zOZ,CuEr0OQ,YAOI,yBvEk0OZ,CuEz0OQ,MAOI,oBvEs0OZ,CuE70OQ,MAOI,oBvE00OZ,CuEj1OQ,MAOI,oBvE80OZ,CuEr1OQ,OAOI,qBvEk1OZ,CuEz1OQ,QAOI,qBvEs1OZ,CuE71OQ,QAOI,yBvE01OZ,CuEj2OQ,QAOI,sBvE81OZ,CuEr2OQ,YAOI,0BvEk2OZ,CuEz2OQ,WAOI,uBvEs2OZ,CuE72OQ,UAOI,4BvE02OZ,CuEj3OQ,aAOI,+BvE82OZ,CuEr3OQ,kBAOI,oCvEk3OZ,CuEz3OQ,qBAOI,uCvEs3OZ,CuE73OQ,aAOI,qBvE03OZ,CuEj4OQ,aAOI,qBvE83OZ,CuEr4OQ,eAOI,uBvEk4OZ,CuEz4OQ,eAOI,uBvEs4OZ,CuE74OQ,WAOI,wBvE04OZ,CuEj5OQ,aAOI,0BvE84OZ,CuEr5OQ,mBAOI,gCvEk5OZ,CuEz5OQ,uBAOI,oCvEs5OZ,CuE75OQ,qBAOI,kCvE05OZ,CuEj6OQ,wBAOI,gCvE85OZ,CuEr6OQ,yBAOI,uCvEk6OZ,CuEz6OQ,wBAOI,sCvEs6OZ,CuE76OQ,wBAOI,sCvE06OZ,CuEj7OQ,mBAOI,gCvE86OZ,CuEr7OQ,iBAOI,8BvEk7OZ,CuEz7OQ,oBAOI,4BvEs7OZ,CuE77OQ,sBAOI,8BvE07OZ,CuEj8OQ,qBAOI,6BvE87OZ,CuEr8OQ,qBAOI,kCvEk8OZ,CuEz8OQ,mBAOI,gCvEs8OZ,CuE78OQ,sBAOI,8BvE08OZ,CuEj9OQ,uBAOI,qCvE88OZ,CuEr9OQ,sBAOI,oCvEk9OZ,CuEz9OQ,uBAOI,+BvEs9OZ,CuE79OQ,iBAOI,yBvE09OZ,CuEj+OQ,kBAOI,+BvE89OZ,CuEr+OQ,gBAOI,6BvEk+OZ,CuEz+OQ,mBAOI,2BvEs+OZ,CuE7+OQ,qBAOI,6BvE0+OZ,CuEj/OQ,oBAOI,4BvE8+OZ,CuEr/OQ,aAOI,kBvEk/OZ,CuEz/OQ,SAOI,iBvEs/OZ,CuE7/OQ,SAOI,iBvE0/OZ,CuEjgPQ,SAOI,iBvE8/OZ,CuErgPQ,SAOI,iBvEkgPZ,CuEzgPQ,SAOI,iBvEsgPZ,CuE7gPQ,SAOI,iBvE0gPZ,CuEjhPQ,YAOI,iBvE8gPZ,CuErhPQ,KAOI,kBvEkhPZ,CuEzhPQ,KAOI,uBvEshPZ,CuE7hPQ,KAOI,sBvE0hPZ,CuEjiPQ,KAOI,qBvE8hPZ,CuEriPQ,KAOI,uBvEkiPZ,CuEziPQ,KAOI,qBvEsiPZ,CuE7iPQ,QAOI,qBvE0iPZ,CuEjjPQ,MAOI,gDvE+iPZ,CuEtjPQ,MAOI,0DvEojPZ,CuE3jPQ,MAOI,wDvEyjPZ,CuEhkPQ,MAOI,sDvE8jPZ,CuErkPQ,MAOI,0DvEmkPZ,CuE1kPQ,MAOI,sDvEwkPZ,CuE/kPQ,SAOI,sDvE6kPZ,CuEplPQ,MAOI,gDvEklPZ,CuEzlPQ,MAOI,0DvEulPZ,CuE9lPQ,MAOI,wDvE4lPZ,CuEnmPQ,MAOI,sDvEimPZ,CuExmPQ,MAOI,0DvEsmPZ,CuE7mPQ,MAOI,sDvE2mPZ,CuElnPQ,SAOI,sDvEgnPZ,CuEvnPQ,MAOI,sBvEonPZ,CuE3nPQ,MAOI,2BvEwnPZ,CuE/nPQ,MAOI,0BvE4nPZ,CuEnoPQ,MAOI,yBvEgoPZ,CuEvoPQ,MAOI,2BvEooPZ,CuE3oPQ,MAOI,yBvEwoPZ,CuE/oPQ,SAOI,yBvE4oPZ,CuEnpPQ,MAOI,wBvEgpPZ,CuEvpPQ,MAOI,6BvEopPZ,CuE3pPQ,MAOI,4BvEwpPZ,CuE/pPQ,MAOI,2BvE4pPZ,CuEnqPQ,MAOI,6BvEgqPZ,CuEvqPQ,MAOI,2BvEoqPZ,CuE3qPQ,SAOI,2BvEwqPZ,CuE/qPQ,MAOI,yBvE4qPZ,CuEnrPQ,MAOI,8BvEgrPZ,CuEvrPQ,MAOI,6BvEorPZ,CuE3rPQ,MAOI,4BvEwrPZ,CuE/rPQ,MAOI,8BvE4rPZ,CuEnsPQ,MAOI,4BvEgsPZ,CuEvsPQ,SAOI,4BvEosPZ,CuE3sPQ,MAOI,uBvEwsPZ,CuE/sPQ,MAOI,4BvE4sPZ,CuEntPQ,MAOI,2BvEgtPZ,CuEvtPQ,MAOI,0BvEotPZ,CuE3tPQ,MAOI,4BvEwtPZ,CuE/tPQ,MAOI,0BvE4tPZ,CuEnuPQ,SAOI,0BvEguPZ,CuEvuPQ,KAOI,mBvEouPZ,CuE3uPQ,KAOI,wBvEwuPZ,CuE/uPQ,KAOI,uBvE4uPZ,CuEnvPQ,KAOI,sBvEgvPZ,CuEvvPQ,KAOI,wBvEovPZ,CuE3vPQ,KAOI,sBvEwvPZ,CuE/vPQ,MAOI,kDvE6vPZ,CuEpwPQ,MAOI,4DvEkwPZ,CuEzwPQ,MAOI,0DvEuwPZ,CuE9wPQ,MAOI,wDvE4wPZ,CuEnxPQ,MAOI,4DvEixPZ,CuExxPQ,MAOI,wDvEsxPZ,CuE7xPQ,MAOI,kDvE2xPZ,CuElyPQ,MAOI,4DvEgyPZ,CuEvyPQ,MAOI,0DvEqyPZ,CuE5yPQ,MAOI,wDvE0yPZ,CuEjzPQ,MAOI,4DvE+yPZ,CuEtzPQ,MAOI,wDvEozPZ,CuE3zPQ,MAOI,uBvEwzPZ,CuE/zPQ,MAOI,4BvE4zPZ,CuEn0PQ,MAOI,2BvEg0PZ,CuEv0PQ,MAOI,0BvEo0PZ,CuE30PQ,MAOI,4BvEw0PZ,CuE/0PQ,MAOI,0BvE40PZ,CuEn1PQ,MAOI,yBvEg1PZ,CuEv1PQ,MAOI,8BvEo1PZ,CuE31PQ,MAOI,6BvEw1PZ,CuE/1PQ,MAOI,4BvE41PZ,CuEn2PQ,MAOI,8BvEg2PZ,CuEv2PQ,MAOI,4BvEo2PZ,CuE32PQ,MAOI,0BvEw2PZ,CuE/2PQ,MAOI,+BvE42PZ,CuEn3PQ,MAOI,8BvEg3PZ,CuEv3PQ,MAOI,6BvEo3PZ,CuE33PQ,MAOI,+BvEw3PZ,CuE/3PQ,MAOI,6BvE43PZ,CuEn4PQ,MAOI,wBvEg4PZ,CuEv4PQ,MAOI,6BvEo4PZ,CuE34PQ,MAOI,4BvEw4PZ,CuE/4PQ,MAOI,2BvE44PZ,CuEn5PQ,MAOI,6BvEg5PZ,CuEv5PQ,MAOI,2BvEo5PZ,CuE35PQ,OAOI,evEw5PZ,CuE/5PQ,OAOI,oBvE45PZ,CuEn6PQ,OAOI,mBvEg6PZ,CuEv6PQ,OAOI,kBvEo6PZ,CuE36PQ,OAOI,oBvEw6PZ,CuE/6PQ,OAOI,kBvE46PZ,CuEn7PQ,WAOI,mBvEg7PZ,CuEv7PQ,WAOI,wBvEo7PZ,CuE37PQ,WAOI,uBvEw7PZ,CuE/7PQ,WAOI,sBvE47PZ,CuEn8PQ,WAOI,wBvEg8PZ,CuEv8PQ,WAOI,sBvEo8PZ,CuE38PQ,cAOI,sBvEw8PZ,CuE/8PQ,cAOI,2BvE48PZ,CuEn9PQ,cAOI,0BvEg9PZ,CuEv9PQ,cAOI,yBvEo9PZ,CuE39PQ,cAOI,2BvEw9PZ,CuE/9PQ,cAOI,yBvE49PZ,CuEn+PQ,gBAOI,8CvEg+PZ,CuEv+PQ,MAOI,0CvEo+PZ,CuE3+PQ,MAOI,yCvEw+PZ,CuE/+PQ,MAOI,uCvE4+PZ,CuEn/PQ,MAOI,yCvEg/PZ,CuEv/PQ,MAOI,2BvEo/PZ,CuE3/PQ,MAOI,wBvEw/PZ,CuE//PQ,YAOI,2BvE4/PZ,CuEngQQ,YAOI,2BvEggQZ,CuEvgQQ,YAOI,6BvEogQZ,CuE3gQQ,UAOI,yBvEwgQZ,CuE/gQQ,WAOI,yBvE4gQZ,CuEnhQQ,WAOI,yBvEghQZ,CuEvhQQ,aAOI,yBvEohQZ,CuE3hQQ,SAOI,yBvEwhQZ,CuE/hQQ,WAOI,4BvE4hQZ,CuEniQQ,MAOI,uBvEgiQZ,CuEviQQ,OAOI,0BvEoiQZ,CuE3iQQ,SAOI,yBvEwiQZ,CuE/iQQ,OAOI,uBvE4iQZ,CuEnjQQ,YAOI,yBvEgjQZ,CuEvjQQ,UAOI,0BvEojQZ,CuE3jQQ,aAOI,2BvEwjQZ,CuE/jQQ,sBAOI,8BvE4jQZ,CuEnkQQ,2BAOI,mCvEgkQZ,CuEvkQQ,8BAOI,sCvEokQZ,CuE3kQQ,gBAOI,kCvEwkQZ,CuE/kQQ,gBAOI,kCvE4kQZ,CuEnlQQ,iBAOI,mCvEglQZ,CuEvlQQ,WAOI,4BvEolQZ,CuE3lQQ,aAOI,4BvEwlQZ,CuE/lQQ,YAOI,8DvE8lQZ,CuErmQQ,cAIQ,oBAGJ,kEvEomQZ,CuE3mQQ,gBAIQ,oBAGJ,oEvEymQZ,CuEhnQQ,cAIQ,oBAGJ,kEvE8mQZ,CuErnQQ,WAIQ,oBAGJ,+DvEmnQZ,CuE1nQQ,cAIQ,oBAGJ,kEvEwnQZ,CuE/nQQ,aAIQ,oBAGJ,iEvE6nQZ,CuEpoQQ,YAIQ,oBAGJ,gEvEkoQZ,CuEzoQQ,WAIQ,oBAGJ,+DvEuoQZ,CuE9oQQ,YAIQ,oBAGJ,gEvE4oQZ,CuEnpQQ,YAIQ,oBAGJ,gEvEipQZ,CuExpQQ,WAIQ,oBAGJ,qEvEspQZ,CuE7pQQ,YAIQ,oBAGJ,yCvE2pQZ,CuElqQQ,eAIQ,oBAGJ,8BvEgqQZ,CuEvqQQ,eAIQ,oBAGJ,kCvEqqQZ,CuE5qQQ,qBAIQ,oBAGJ,yCvE0qQZ,CuEjrQQ,oBAIQ,oBAGJ,wCvE+qQZ,CuEtrQQ,oBAIQ,oBAGJ,wCvEorQZ,CuE3rQQ,YAIQ,oBAGJ,uBvEyrQZ,CuE1sQQ,iBACE,sBvE6sQV,CuE9sQQ,iBACE,qBvEitQV,CuEltQQ,iBACE,sBvEqtQV,CuEttQQ,kBACE,mBvEytQV,CuEhtQQ,uBAOI,+CvE6sQZ,CuEptQQ,yBAOI,iDvEitQZ,CuExtQQ,uBAOI,+CvEqtQZ,CuE5tQQ,oBAOI,4CvEytQZ,CuEhuQQ,uBAOI,+CvE6tQZ,CuEpuQQ,sBAOI,8CvEiuQZ,CuExuQQ,qBAOI,6CvEquQZ,CuE5uQQ,oBAOI,4CvEyuQZ,CuErvQU,8CACE,qBvE4vQZ,CuE7vQU,8CACE,sBvEowQZ,CuErwQU,8CACE,qBvE4wQZ,CuE7wQU,8CACE,sBvEoxQZ,CuErxQU,gDACE,mBvE4xQZ,CuE5wQU,0CAOI,sCvE6wQd,CuEpxQU,0CAOI,qCvEqxQd,CuE5xQU,0CAOI,sCvE6xQd,CuEhzQQ,wBAIQ,8BAGJ,4FvE8yQZ,CuErzQQ,0BAIQ,8BAGJ,8FvEmzQZ,CuE1zQQ,wBAIQ,8BAGJ,4FvEwzQZ,CuE/zQQ,qBAIQ,8BAGJ,yFvE6zQZ,CuEp0QQ,wBAIQ,8BAGJ,4FvEk0QZ,CuEz0QQ,uBAIQ,8BAGJ,2FvEu0QZ,CuE90QQ,sBAIQ,8BAGJ,0FvE40QZ,CuEn1QQ,qBAIQ,8BAGJ,yFvEi1QZ,CuEx1QQ,gBAIQ,8BAGJ,iGvEs1QZ,CuEl2QU,gEACE,6BvEy2QZ,CuE12QU,kEACE,+BvEi3QZ,CuEl3QU,kEACE,gCvEy3QZ,CuE13QU,kEACE,+BvEi4QZ,CuEl4QU,kEACE,gCvEy4QZ,CuE14QU,oEACE,6BvEi5QZ,CuE74QQ,YAIQ,kBAGJ,2EvE24QZ,CuEl5QQ,cAIQ,kBAGJ,6EvEg5QZ,CuEv5QQ,YAIQ,kBAGJ,2EvEq5QZ,CuE55QQ,SAIQ,kBAGJ,wEvE05QZ,CuEj6QQ,YAIQ,kBAGJ,2EvE+5QZ,CuEt6QQ,WAIQ,kBAGJ,0EvEo6QZ,CuE36QQ,UAIQ,kBAGJ,yEvEy6QZ,CuEh7QQ,SAIQ,kBAGJ,wEvE86QZ,CuEr7QQ,UAIQ,kBAGJ,yEvEm7QZ,CuE17QQ,UAIQ,kBAGJ,yEvEw7QZ,CuE/7QQ,SAIQ,kBAGJ,2EvE67QZ,CuEp8QQ,gBAIQ,kBAGJ,sCvEk8QZ,CuEz8QQ,mBAIQ,kBAGJ,gFvEu8QZ,CuE98QQ,kBAIQ,kBAGJ,+EvE48QZ,CuE79QQ,eACE,mBvEg+QV,CuEj+QQ,eACE,oBvEo+QV,CuEr+QQ,eACE,mBvEw+QV,CuEz+QQ,eACE,oBvE4+QV,CuE7+QQ,gBACE,iBvEg/QV,CuEv+QQ,mBAOI,sDvEo+QZ,CuE3+QQ,qBAOI,wDvEw+QZ,CuE/+QQ,mBAOI,sDvE4+QZ,CuEn/QQ,gBAOI,mDvEg/QZ,CuEv/QQ,mBAOI,sDvEo/QZ,CuE3/QQ,kBAOI,qDvEw/QZ,CuE//QQ,iBAOI,oDvE4/QZ,CuEngRQ,gBAOI,mDvEggRZ,CuEvgRQ,aAOI,6CvEogRZ,CuE3gRQ,iBAOI,yBvEwgRZ,CuE/gRQ,kBAOI,0BvE4gRZ,CuEnhRQ,kBAOI,0BvEghRZ,CuEvhRQ,SAOI,6BvEohRZ,CuE3hRQ,SAOI,6BvEwhRZ,CuE/hRQ,SAOI,+CvE4hRZ,CuEniRQ,WAOI,yBvEgiRZ,CuEviRQ,WAOI,kDvEoiRZ,CuE3iRQ,WAOI,+CvEwiRZ,CuE/iRQ,WAOI,kDvE4iRZ,CuEnjRQ,WAOI,kDvEgjRZ,CuEvjRQ,WAOI,mDvEojRZ,CuE3jRQ,gBAOI,2BvEwjRZ,CuE/jRQ,cAOI,oDvE4jRZ,CuEnkRQ,aAOI,kHvEikRZ,CuExkRQ,eAOI,sEvEskRZ,CuE7kRQ,eAOI,wHvE2kRZ,CuEllRQ,eAOI,kHvEglRZ,CuEvlRQ,eAOI,wHvEqlRZ,CuE5lRQ,eAOI,wHvE0lRZ,CuEjmRQ,eAOI,0HvE+lRZ,CuEtmRQ,oBAOI,0EvEomRZ,CuE3mRQ,kBAOI,4HvEymRZ,CuEhnRQ,aAOI,sHvE8mRZ,CuErnRQ,eAOI,0EvEmnRZ,CuE1nRQ,eAOI,4HvEwnRZ,CuE/nRQ,eAOI,sHvE6nRZ,CuEpoRQ,eAOI,4HvEkoRZ,CuEzoRQ,eAOI,4HvEuoRZ,CuE9oRQ,eAOI,8HvE4oRZ,CuEnpRQ,oBAOI,8EvEipRZ,CuExpRQ,kBAOI,gIvEspRZ,CuE7pRQ,gBAOI,wHvE2pRZ,CuElqRQ,kBAOI,4EvEgqRZ,CuEvqRQ,kBAOI,8HvEqqRZ,CuE5qRQ,kBAOI,wHvE0qRZ,CuEjrRQ,kBAOI,8HvE+qRZ,CuEtrRQ,kBAOI,8HvEorRZ,CuE3rRQ,kBAOI,gIvEyrRZ,CuEhsRQ,uBAOI,gFvE8rRZ,CuErsRQ,qBAOI,kIvEmsRZ,CuE1sRQ,eAOI,oHvEwsRZ,CuE/sRQ,iBAOI,wEvE6sRZ,CuEptRQ,iBAOI,0HvEktRZ,CuEztRQ,iBAOI,oHvEutRZ,CuE9tRQ,iBAOI,0HvE4tRZ,CuEnuRQ,iBAOI,0HvEiuRZ,CuExuRQ,iBAOI,4HvEsuRZ,CuE7uRQ,sBAOI,4EvE2uRZ,CuElvRQ,oBAOI,8HvEgvRZ,CuEvvRQ,SAOI,4BvEovRZ,CuE3vRQ,WAOI,2BvEwvRZ,CuE/vRQ,MAOI,oBvE4vRZ,CuEnwRQ,KAOI,mBvEgwRZ,CuEvwRQ,KAOI,mBvEowRZ,CuE3wRQ,KAOI,mBvEwwRZ,CuE/wRQ,KAOI,mBvE4wRZ,CatxRI,yB0DGI,gBAOI,oBvEixRV,CuExxRM,cAOI,qBvEoxRV,CuE3xRM,eAOI,oBvEuxRV,CuE9xRM,uBAOI,4BvE0xRV,CuEjyRM,qBAOI,0BvE6xRV,CuEpyRM,oBAOI,yBvEgyRV,CuEvyRM,qBAOI,+BvEmyRV,CuE1yRM,oBAOI,yBvEsyRV,CuE7yRM,aAOI,wBvEyyRV,CuEhzRM,mBAOI,8BvE4yRV,CuEnzRM,YAOI,uBvE+yRV,CuEtzRM,WAOI,sBvEkzRV,CuEzzRM,kBAOI,6BvEqzRV,CuE5zRM,YAOI,uBvEwzRV,CuE/zRM,gBAOI,2BvE2zRV,CuEl0RM,iBAOI,4BvE8zRV,CuEr0RM,WAOI,sBvEi0RV,CuEx0RM,kBAOI,6BvEo0RV,CuE30RM,WAOI,sBvEu0RV,CuE90RM,cAOI,uBvE00RV,CuEj1RM,aAOI,4BvE60RV,CuEp1RM,gBAOI,+BvEg1RV,CuEv1RM,qBAOI,oCvEm1RV,CuE11RM,wBAOI,uCvEs1RV,CuE71RM,gBAOI,qBvEy1RV,CuEh2RM,gBAOI,qBvE41RV,CuEn2RM,kBAOI,uBvE+1RV,CuEt2RM,kBAOI,uBvEk2RV,CuEz2RM,cAOI,wBvEq2RV,CuE52RM,gBAOI,0BvEw2RV,CuE/2RM,sBAOI,gCvE22RV,CuEl3RM,0BAOI,oCvE82RV,CuEr3RM,wBAOI,kCvEi3RV,CuEx3RM,2BAOI,gCvEo3RV,CuE33RM,4BAOI,uCvEu3RV,CuE93RM,2BAOI,sCvE03RV,CuEj4RM,2BAOI,sCvE63RV,CuEp4RM,sBAOI,gCvEg4RV,CuEv4RM,oBAOI,8BvEm4RV,CuE14RM,uBAOI,4BvEs4RV,CuE74RM,yBAOI,8BvEy4RV,CuEh5RM,wBAOI,6BvE44RV,CuEn5RM,wBAOI,kCvE+4RV,CuEt5RM,sBAOI,gCvEk5RV,CuEz5RM,yBAOI,8BvEq5RV,CuE55RM,0BAOI,qCvEw5RV,CuE/5RM,yBAOI,oCvE25RV,CuEl6RM,0BAOI,+BvE85RV,CuEr6RM,oBAOI,yBvEi6RV,CuEx6RM,qBAOI,+BvEo6RV,CuE36RM,mBAOI,6BvEu6RV,CuE96RM,sBAOI,2BvE06RV,CuEj7RM,wBAOI,6BvE66RV,CuEp7RM,uBAOI,4BvEg7RV,CuEv7RM,gBAOI,kBvEm7RV,CuE17RM,YAOI,iBvEs7RV,CuE77RM,YAOI,iBvEy7RV,CuEh8RM,YAOI,iBvE47RV,CuEn8RM,YAOI,iBvE+7RV,CuEt8RM,YAOI,iBvEk8RV,CuEz8RM,YAOI,iBvEq8RV,CuE58RM,eAOI,iBvEw8RV,CuE/8RM,QAOI,kBvE28RV,CuEl9RM,QAOI,uBvE88RV,CuEr9RM,QAOI,sBvEi9RV,CuEx9RM,QAOI,qBvEo9RV,CuE39RM,QAOI,uBvEu9RV,CuE99RM,QAOI,qBvE09RV,CuEj+RM,WAOI,qBvE69RV,CuEp+RM,SAOI,gDvEi+RV,CuEx+RM,SAOI,0DvEq+RV,CuE5+RM,SAOI,wDvEy+RV,CuEh/RM,SAOI,sDvE6+RV,CuEp/RM,SAOI,0DvEi/RV,CuEx/RM,SAOI,sDvEq/RV,CuE5/RM,YAOI,sDvEy/RV,CuEhgSM,SAOI,gDvE6/RV,CuEpgSM,SAOI,0DvEigSV,CuExgSM,SAOI,wDvEqgSV,CuE5gSM,SAOI,sDvEygSV,CuEhhSM,SAOI,0DvE6gSV,CuEphSM,SAOI,sDvEihSV,CuExhSM,YAOI,sDvEqhSV,CuE5hSM,SAOI,sBvEwhSV,CuE/hSM,SAOI,2BvE2hSV,CuEliSM,SAOI,0BvE8hSV,CuEriSM,SAOI,yBvEiiSV,CuExiSM,SAOI,2BvEoiSV,CuE3iSM,SAOI,yBvEuiSV,CuE9iSM,YAOI,yBvE0iSV,CuEjjSM,SAOI,wBvE6iSV,CuEpjSM,SAOI,6BvEgjSV,CuEvjSM,SAOI,4BvEmjSV,CuE1jSM,SAOI,2BvEsjSV,CuE7jSM,SAOI,6BvEyjSV,CuEhkSM,SAOI,2BvE4jSV,CuEnkSM,YAOI,2BvE+jSV,CuEtkSM,SAOI,yBvEkkSV,CuEzkSM,SAOI,8BvEqkSV,CuE5kSM,SAOI,6BvEwkSV,CuE/kSM,SAOI,4BvE2kSV,CuEllSM,SAOI,8BvE8kSV,CuErlSM,SAOI,4BvEilSV,CuExlSM,YAOI,4BvEolSV,CuE3lSM,SAOI,uBvEulSV,CuE9lSM,SAOI,4BvE0lSV,CuEjmSM,SAOI,2BvE6lSV,CuEpmSM,SAOI,0BvEgmSV,CuEvmSM,SAOI,4BvEmmSV,CuE1mSM,SAOI,0BvEsmSV,CuE7mSM,YAOI,0BvEymSV,CuEhnSM,QAOI,mBvE4mSV,CuEnnSM,QAOI,wBvE+mSV,CuEtnSM,QAOI,uBvEknSV,CuEznSM,QAOI,sBvEqnSV,CuE5nSM,QAOI,wBvEwnSV,CuE/nSM,QAOI,sBvE2nSV,CuEloSM,SAOI,kDvE+nSV,CuEtoSM,SAOI,4DvEmoSV,CuE1oSM,SAOI,0DvEuoSV,CuE9oSM,SAOI,wDvE2oSV,CuElpSM,SAOI,4DvE+oSV,CuEtpSM,SAOI,wDvEmpSV,CuE1pSM,SAOI,kDvEupSV,CuE9pSM,SAOI,4DvE2pSV,CuElqSM,SAOI,0DvE+pSV,CuEtqSM,SAOI,wDvEmqSV,CuE1qSM,SAOI,4DvEuqSV,CuE9qSM,SAOI,wDvE2qSV,CuElrSM,SAOI,uBvE8qSV,CuErrSM,SAOI,4BvEirSV,CuExrSM,SAOI,2BvEorSV,CuE3rSM,SAOI,0BvEurSV,CuE9rSM,SAOI,4BvE0rSV,CuEjsSM,SAOI,0BvE6rSV,CuEpsSM,SAOI,yBvEgsSV,CuEvsSM,SAOI,8BvEmsSV,CuE1sSM,SAOI,6BvEssSV,CuE7sSM,SAOI,4BvEysSV,CuEhtSM,SAOI,8BvE4sSV,CuEntSM,SAOI,4BvE+sSV,CuEttSM,SAOI,0BvEktSV,CuEztSM,SAOI,+BvEqtSV,CuE5tSM,SAOI,8BvEwtSV,CuE/tSM,SAOI,6BvE2tSV,CuEluSM,SAOI,+BvE8tSV,CuEruSM,SAOI,6BvEiuSV,CuExuSM,SAOI,wBvEouSV,CuE3uSM,SAOI,6BvEuuSV,CuE9uSM,SAOI,4BvE0uSV,CuEjvSM,SAOI,2BvE6uSV,CuEpvSM,SAOI,6BvEgvSV,CuEvvSM,SAOI,2BvEmvSV,CuE1vSM,UAOI,evEsvSV,CuE7vSM,UAOI,oBvEyvSV,CuEhwSM,UAOI,mBvE4vSV,CuEnwSM,UAOI,kBvE+vSV,CuEtwSM,UAOI,oBvEkwSV,CuEzwSM,UAOI,kBvEqwSV,CuE5wSM,cAOI,mBvEwwSV,CuE/wSM,cAOI,wBvE2wSV,CuElxSM,cAOI,uBvE8wSV,CuErxSM,cAOI,sBvEixSV,CuExxSM,cAOI,wBvEoxSV,CuE3xSM,cAOI,sBvEuxSV,CuE9xSM,iBAOI,sBvE0xSV,CuEjySM,iBAOI,2BvE6xSV,CuEpySM,iBAOI,0BvEgySV,CuEvySM,iBAOI,yBvEmySV,CuE1ySM,iBAOI,2BvEsySV,CuE7ySM,iBAOI,yBvEyySV,CuEhzSM,eAOI,yBvE4ySV,CuEnzSM,aAOI,0BvE+ySV,CuEtzSM,gBAOI,2BvEkzSV,CACF,Ca7zSI,yB0DGI,gBAOI,oBvEuzSV,CuE9zSM,cAOI,qBvE0zSV,CuEj0SM,eAOI,oBvE6zSV,CuEp0SM,uBAOI,4BvEg0SV,CuEv0SM,qBAOI,0BvEm0SV,CuE10SM,oBAOI,yBvEs0SV,CuE70SM,qBAOI,+BvEy0SV,CuEh1SM,oBAOI,yBvE40SV,CuEn1SM,aAOI,wBvE+0SV,CuEt1SM,mBAOI,8BvEk1SV,CuEz1SM,YAOI,uBvEq1SV,CuE51SM,WAOI,sBvEw1SV,CuE/1SM,kBAOI,6BvE21SV,CuEl2SM,YAOI,uBvE81SV,CuEr2SM,gBAOI,2BvEi2SV,CuEx2SM,iBAOI,4BvEo2SV,CuE32SM,WAOI,sBvEu2SV,CuE92SM,kBAOI,6BvE02SV,CuEj3SM,WAOI,sBvE62SV,CuEp3SM,cAOI,uBvEg3SV,CuEv3SM,aAOI,4BvEm3SV,CuE13SM,gBAOI,+BvEs3SV,CuE73SM,qBAOI,oCvEy3SV,CuEh4SM,wBAOI,uCvE43SV,CuEn4SM,gBAOI,qBvE+3SV,CuEt4SM,gBAOI,qBvEk4SV,CuEz4SM,kBAOI,uBvEq4SV,CuE54SM,kBAOI,uBvEw4SV,CuE/4SM,cAOI,wBvE24SV,CuEl5SM,gBAOI,0BvE84SV,CuEr5SM,sBAOI,gCvEi5SV,CuEx5SM,0BAOI,oCvEo5SV,CuE35SM,wBAOI,kCvEu5SV,CuE95SM,2BAOI,gCvE05SV,CuEj6SM,4BAOI,uCvE65SV,CuEp6SM,2BAOI,sCvEg6SV,CuEv6SM,2BAOI,sCvEm6SV,CuE16SM,sBAOI,gCvEs6SV,CuE76SM,oBAOI,8BvEy6SV,CuEh7SM,uBAOI,4BvE46SV,CuEn7SM,yBAOI,8BvE+6SV,CuEt7SM,wBAOI,6BvEk7SV,CuEz7SM,wBAOI,kCvEq7SV,CuE57SM,sBAOI,gCvEw7SV,CuE/7SM,yBAOI,8BvE27SV,CuEl8SM,0BAOI,qCvE87SV,CuEr8SM,yBAOI,oCvEi8SV,CuEx8SM,0BAOI,+BvEo8SV,CuE38SM,oBAOI,yBvEu8SV,CuE98SM,qBAOI,+BvE08SV,CuEj9SM,mBAOI,6BvE68SV,CuEp9SM,sBAOI,2BvEg9SV,CuEv9SM,wBAOI,6BvEm9SV,CuE19SM,uBAOI,4BvEs9SV,CuE79SM,gBAOI,kBvEy9SV,CuEh+SM,YAOI,iBvE49SV,CuEn+SM,YAOI,iBvE+9SV,CuEt+SM,YAOI,iBvEk+SV,CuEz+SM,YAOI,iBvEq+SV,CuE5+SM,YAOI,iBvEw+SV,CuE/+SM,YAOI,iBvE2+SV,CuEl/SM,eAOI,iBvE8+SV,CuEr/SM,QAOI,kBvEi/SV,CuEx/SM,QAOI,uBvEo/SV,CuE3/SM,QAOI,sBvEu/SV,CuE9/SM,QAOI,qBvE0/SV,CuEjgTM,QAOI,uBvE6/SV,CuEpgTM,QAOI,qBvEggTV,CuEvgTM,WAOI,qBvEmgTV,CuE1gTM,SAOI,gDvEugTV,CuE9gTM,SAOI,0DvE2gTV,CuElhTM,SAOI,wDvE+gTV,CuEthTM,SAOI,sDvEmhTV,CuE1hTM,SAOI,0DvEuhTV,CuE9hTM,SAOI,sDvE2hTV,CuEliTM,YAOI,sDvE+hTV,CuEtiTM,SAOI,gDvEmiTV,CuE1iTM,SAOI,0DvEuiTV,CuE9iTM,SAOI,wDvE2iTV,CuEljTM,SAOI,sDvE+iTV,CuEtjTM,SAOI,0DvEmjTV,CuE1jTM,SAOI,sDvEujTV,CuE9jTM,YAOI,sDvE2jTV,CuElkTM,SAOI,sBvE8jTV,CuErkTM,SAOI,2BvEikTV,CuExkTM,SAOI,0BvEokTV,CuE3kTM,SAOI,yBvEukTV,CuE9kTM,SAOI,2BvE0kTV,CuEjlTM,SAOI,yBvE6kTV,CuEplTM,YAOI,yBvEglTV,CuEvlTM,SAOI,wBvEmlTV,CuE1lTM,SAOI,6BvEslTV,CuE7lTM,SAOI,4BvEylTV,CuEhmTM,SAOI,2BvE4lTV,CuEnmTM,SAOI,6BvE+lTV,CuEtmTM,SAOI,2BvEkmTV,CuEzmTM,YAOI,2BvEqmTV,CuE5mTM,SAOI,yBvEwmTV,CuE/mTM,SAOI,8BvE2mTV,CuElnTM,SAOI,6BvE8mTV,CuErnTM,SAOI,4BvEinTV,CuExnTM,SAOI,8BvEonTV,CuE3nTM,SAOI,4BvEunTV,CuE9nTM,YAOI,4BvE0nTV,CuEjoTM,SAOI,uBvE6nTV,CuEpoTM,SAOI,4BvEgoTV,CuEvoTM,SAOI,2BvEmoTV,CuE1oTM,SAOI,0BvEsoTV,CuE7oTM,SAOI,4BvEyoTV,CuEhpTM,SAOI,0BvE4oTV,CuEnpTM,YAOI,0BvE+oTV,CuEtpTM,QAOI,mBvEkpTV,CuEzpTM,QAOI,wBvEqpTV,CuE5pTM,QAOI,uBvEwpTV,CuE/pTM,QAOI,sBvE2pTV,CuElqTM,QAOI,wBvE8pTV,CuErqTM,QAOI,sBvEiqTV,CuExqTM,SAOI,kDvEqqTV,CuE5qTM,SAOI,4DvEyqTV,CuEhrTM,SAOI,0DvE6qTV,CuEprTM,SAOI,wDvEirTV,CuExrTM,SAOI,4DvEqrTV,CuE5rTM,SAOI,wDvEyrTV,CuEhsTM,SAOI,kDvE6rTV,CuEpsTM,SAOI,4DvEisTV,CuExsTM,SAOI,0DvEqsTV,CuE5sTM,SAOI,wDvEysTV,CuEhtTM,SAOI,4DvE6sTV,CuEptTM,SAOI,wDvEitTV,CuExtTM,SAOI,uBvEotTV,CuE3tTM,SAOI,4BvEutTV,CuE9tTM,SAOI,2BvE0tTV,CuEjuTM,SAOI,0BvE6tTV,CuEpuTM,SAOI,4BvEguTV,CuEvuTM,SAOI,0BvEmuTV,CuE1uTM,SAOI,yBvEsuTV,CuE7uTM,SAOI,8BvEyuTV,CuEhvTM,SAOI,6BvE4uTV,CuEnvTM,SAOI,4BvE+uTV,CuEtvTM,SAOI,8BvEkvTV,CuEzvTM,SAOI,4BvEqvTV,CuE5vTM,SAOI,0BvEwvTV,CuE/vTM,SAOI,+BvE2vTV,CuElwTM,SAOI,8BvE8vTV,CuErwTM,SAOI,6BvEiwTV,CuExwTM,SAOI,+BvEowTV,CuE3wTM,SAOI,6BvEuwTV,CuE9wTM,SAOI,wBvE0wTV,CuEjxTM,SAOI,6BvE6wTV,CuEpxTM,SAOI,4BvEgxTV,CuEvxTM,SAOI,2BvEmxTV,CuE1xTM,SAOI,6BvEsxTV,CuE7xTM,SAOI,2BvEyxTV,CuEhyTM,UAOI,evE4xTV,CuEnyTM,UAOI,oBvE+xTV,CuEtyTM,UAOI,mBvEkyTV,CuEzyTM,UAOI,kBvEqyTV,CuE5yTM,UAOI,oBvEwyTV,CuE/yTM,UAOI,kBvE2yTV,CuElzTM,cAOI,mBvE8yTV,CuErzTM,cAOI,wBvEizTV,CuExzTM,cAOI,uBvEozTV,CuE3zTM,cAOI,sBvEuzTV,CuE9zTM,cAOI,wBvE0zTV,CuEj0TM,cAOI,sBvE6zTV,CuEp0TM,iBAOI,sBvEg0TV,CuEv0TM,iBAOI,2BvEm0TV,CuE10TM,iBAOI,0BvEs0TV,CuE70TM,iBAOI,yBvEy0TV,CuEh1TM,iBAOI,2BvE40TV,CuEn1TM,iBAOI,yBvE+0TV,CuEt1TM,eAOI,yBvEk1TV,CuEz1TM,aAOI,0BvEq1TV,CuE51TM,gBAOI,2BvEw1TV,CACF,Can2TI,yB0DGI,gBAOI,oBvE61TV,CuEp2TM,cAOI,qBvEg2TV,CuEv2TM,eAOI,oBvEm2TV,CuE12TM,uBAOI,4BvEs2TV,CuE72TM,qBAOI,0BvEy2TV,CuEh3TM,oBAOI,yBvE42TV,CuEn3TM,qBAOI,+BvE+2TV,CuEt3TM,oBAOI,yBvEk3TV,CuEz3TM,aAOI,wBvEq3TV,CuE53TM,mBAOI,8BvEw3TV,CuE/3TM,YAOI,uBvE23TV,CuEl4TM,WAOI,sBvE83TV,CuEr4TM,kBAOI,6BvEi4TV,CuEx4TM,YAOI,uBvEo4TV,CuE34TM,gBAOI,2BvEu4TV,CuE94TM,iBAOI,4BvE04TV,CuEj5TM,WAOI,sBvE64TV,CuEp5TM,kBAOI,6BvEg5TV,CuEv5TM,WAOI,sBvEm5TV,CuE15TM,cAOI,uBvEs5TV,CuE75TM,aAOI,4BvEy5TV,CuEh6TM,gBAOI,+BvE45TV,CuEn6TM,qBAOI,oCvE+5TV,CuEt6TM,wBAOI,uCvEk6TV,CuEz6TM,gBAOI,qBvEq6TV,CuE56TM,gBAOI,qBvEw6TV,CuE/6TM,kBAOI,uBvE26TV,CuEl7TM,kBAOI,uBvE86TV,CuEr7TM,cAOI,wBvEi7TV,CuEx7TM,gBAOI,0BvEo7TV,CuE37TM,sBAOI,gCvEu7TV,CuE97TM,0BAOI,oCvE07TV,CuEj8TM,wBAOI,kCvE67TV,CuEp8TM,2BAOI,gCvEg8TV,CuEv8TM,4BAOI,uCvEm8TV,CuE18TM,2BAOI,sCvEs8TV,CuE78TM,2BAOI,sCvEy8TV,CuEh9TM,sBAOI,gCvE48TV,CuEn9TM,oBAOI,8BvE+8TV,CuEt9TM,uBAOI,4BvEk9TV,CuEz9TM,yBAOI,8BvEq9TV,CuE59TM,wBAOI,6BvEw9TV,CuE/9TM,wBAOI,kCvE29TV,CuEl+TM,sBAOI,gCvE89TV,CuEr+TM,yBAOI,8BvEi+TV,CuEx+TM,0BAOI,qCvEo+TV,CuE3+TM,yBAOI,oCvEu+TV,CuE9+TM,0BAOI,+BvE0+TV,CuEj/TM,oBAOI,yBvE6+TV,CuEp/TM,qBAOI,+BvEg/TV,CuEv/TM,mBAOI,6BvEm/TV,CuE1/TM,sBAOI,2BvEs/TV,CuE7/TM,wBAOI,6BvEy/TV,CuEhgUM,uBAOI,4BvE4/TV,CuEngUM,gBAOI,kBvE+/TV,CuEtgUM,YAOI,iBvEkgUV,CuEzgUM,YAOI,iBvEqgUV,CuE5gUM,YAOI,iBvEwgUV,CuE/gUM,YAOI,iBvE2gUV,CuElhUM,YAOI,iBvE8gUV,CuErhUM,YAOI,iBvEihUV,CuExhUM,eAOI,iBvEohUV,CuE3hUM,QAOI,kBvEuhUV,CuE9hUM,QAOI,uBvE0hUV,CuEjiUM,QAOI,sBvE6hUV,CuEpiUM,QAOI,qBvEgiUV,CuEviUM,QAOI,uBvEmiUV,CuE1iUM,QAOI,qBvEsiUV,CuE7iUM,WAOI,qBvEyiUV,CuEhjUM,SAOI,gDvE6iUV,CuEpjUM,SAOI,0DvEijUV,CuExjUM,SAOI,wDvEqjUV,CuE5jUM,SAOI,sDvEyjUV,CuEhkUM,SAOI,0DvE6jUV,CuEpkUM,SAOI,sDvEikUV,CuExkUM,YAOI,sDvEqkUV,CuE5kUM,SAOI,gDvEykUV,CuEhlUM,SAOI,0DvE6kUV,CuEplUM,SAOI,wDvEilUV,CuExlUM,SAOI,sDvEqlUV,CuE5lUM,SAOI,0DvEylUV,CuEhmUM,SAOI,sDvE6lUV,CuEpmUM,YAOI,sDvEimUV,CuExmUM,SAOI,sBvEomUV,CuE3mUM,SAOI,2BvEumUV,CuE9mUM,SAOI,0BvE0mUV,CuEjnUM,SAOI,yBvE6mUV,CuEpnUM,SAOI,2BvEgnUV,CuEvnUM,SAOI,yBvEmnUV,CuE1nUM,YAOI,yBvEsnUV,CuE7nUM,SAOI,wBvEynUV,CuEhoUM,SAOI,6BvE4nUV,CuEnoUM,SAOI,4BvE+nUV,CuEtoUM,SAOI,2BvEkoUV,CuEzoUM,SAOI,6BvEqoUV,CuE5oUM,SAOI,2BvEwoUV,CuE/oUM,YAOI,2BvE2oUV,CuElpUM,SAOI,yBvE8oUV,CuErpUM,SAOI,8BvEipUV,CuExpUM,SAOI,6BvEopUV,CuE3pUM,SAOI,4BvEupUV,CuE9pUM,SAOI,8BvE0pUV,CuEjqUM,SAOI,4BvE6pUV,CuEpqUM,YAOI,4BvEgqUV,CuEvqUM,SAOI,uBvEmqUV,CuE1qUM,SAOI,4BvEsqUV,CuE7qUM,SAOI,2BvEyqUV,CuEhrUM,SAOI,0BvE4qUV,CuEnrUM,SAOI,4BvE+qUV,CuEtrUM,SAOI,0BvEkrUV,CuEzrUM,YAOI,0BvEqrUV,CuE5rUM,QAOI,mBvEwrUV,CuE/rUM,QAOI,wBvE2rUV,CuElsUM,QAOI,uBvE8rUV,CuErsUM,QAOI,sBvEisUV,CuExsUM,QAOI,wBvEosUV,CuE3sUM,QAOI,sBvEusUV,CuE9sUM,SAOI,kDvE2sUV,CuEltUM,SAOI,4DvE+sUV,CuEttUM,SAOI,0DvEmtUV,CuE1tUM,SAOI,wDvEutUV,CuE9tUM,SAOI,4DvE2tUV,CuEluUM,SAOI,wDvE+tUV,CuEtuUM,SAOI,kDvEmuUV,CuE1uUM,SAOI,4DvEuuUV,CuE9uUM,SAOI,0DvE2uUV,CuElvUM,SAOI,wDvE+uUV,CuEtvUM,SAOI,4DvEmvUV,CuE1vUM,SAOI,wDvEuvUV,CuE9vUM,SAOI,uBvE0vUV,CuEjwUM,SAOI,4BvE6vUV,CuEpwUM,SAOI,2BvEgwUV,CuEvwUM,SAOI,0BvEmwUV,CuE1wUM,SAOI,4BvEswUV,CuE7wUM,SAOI,0BvEywUV,CuEhxUM,SAOI,yBvE4wUV,CuEnxUM,SAOI,8BvE+wUV,CuEtxUM,SAOI,6BvEkxUV,CuEzxUM,SAOI,4BvEqxUV,CuE5xUM,SAOI,8BvEwxUV,CuE/xUM,SAOI,4BvE2xUV,CuElyUM,SAOI,0BvE8xUV,CuEryUM,SAOI,+BvEiyUV,CuExyUM,SAOI,8BvEoyUV,CuE3yUM,SAOI,6BvEuyUV,CuE9yUM,SAOI,+BvE0yUV,CuEjzUM,SAOI,6BvE6yUV,CuEpzUM,SAOI,wBvEgzUV,CuEvzUM,SAOI,6BvEmzUV,CuE1zUM,SAOI,4BvEszUV,CuE7zUM,SAOI,2BvEyzUV,CuEh0UM,SAOI,6BvE4zUV,CuEn0UM,SAOI,2BvE+zUV,CuEt0UM,UAOI,evEk0UV,CuEz0UM,UAOI,oBvEq0UV,CuE50UM,UAOI,mBvEw0UV,CuE/0UM,UAOI,kBvE20UV,CuEl1UM,UAOI,oBvE80UV,CuEr1UM,UAOI,kBvEi1UV,CuEx1UM,cAOI,mBvEo1UV,CuE31UM,cAOI,wBvEu1UV,CuE91UM,cAOI,uBvE01UV,CuEj2UM,cAOI,sBvE61UV,CuEp2UM,cAOI,wBvEg2UV,CuEv2UM,cAOI,sBvEm2UV,CuE12UM,iBAOI,sBvEs2UV,CuE72UM,iBAOI,2BvEy2UV,CuEh3UM,iBAOI,0BvE42UV,CuEn3UM,iBAOI,yBvE+2UV,CuEt3UM,iBAOI,2BvEk3UV,CuEz3UM,iBAOI,yBvEq3UV,CuE53UM,eAOI,yBvEw3UV,CuE/3UM,aAOI,0BvE23UV,CuEl4UM,gBAOI,2BvE83UV,CACF,Caz4UI,0B0DGI,gBAOI,oBvEm4UV,CuE14UM,cAOI,qBvEs4UV,CuE74UM,eAOI,oBvEy4UV,CuEh5UM,uBAOI,4BvE44UV,CuEn5UM,qBAOI,0BvE+4UV,CuEt5UM,oBAOI,yBvEk5UV,CuEz5UM,qBAOI,+BvEq5UV,CuE55UM,oBAOI,yBvEw5UV,CuE/5UM,aAOI,wBvE25UV,CuEl6UM,mBAOI,8BvE85UV,CuEr6UM,YAOI,uBvEi6UV,CuEx6UM,WAOI,sBvEo6UV,CuE36UM,kBAOI,6BvEu6UV,CuE96UM,YAOI,uBvE06UV,CuEj7UM,gBAOI,2BvE66UV,CuEp7UM,iBAOI,4BvEg7UV,CuEv7UM,WAOI,sBvEm7UV,CuE17UM,kBAOI,6BvEs7UV,CuE77UM,WAOI,sBvEy7UV,CuEh8UM,cAOI,uBvE47UV,CuEn8UM,aAOI,4BvE+7UV,CuEt8UM,gBAOI,+BvEk8UV,CuEz8UM,qBAOI,oCvEq8UV,CuE58UM,wBAOI,uCvEw8UV,CuE/8UM,gBAOI,qBvE28UV,CuEl9UM,gBAOI,qBvE88UV,CuEr9UM,kBAOI,uBvEi9UV,CuEx9UM,kBAOI,uBvEo9UV,CuE39UM,cAOI,wBvEu9UV,CuE99UM,gBAOI,0BvE09UV,CuEj+UM,sBAOI,gCvE69UV,CuEp+UM,0BAOI,oCvEg+UV,CuEv+UM,wBAOI,kCvEm+UV,CuE1+UM,2BAOI,gCvEs+UV,CuE7+UM,4BAOI,uCvEy+UV,CuEh/UM,2BAOI,sCvE4+UV,CuEn/UM,2BAOI,sCvE++UV,CuEt/UM,sBAOI,gCvEk/UV,CuEz/UM,oBAOI,8BvEq/UV,CuE5/UM,uBAOI,4BvEw/UV,CuE//UM,yBAOI,8BvE2/UV,CuElgVM,wBAOI,6BvE8/UV,CuErgVM,wBAOI,kCvEigVV,CuExgVM,sBAOI,gCvEogVV,CuE3gVM,yBAOI,8BvEugVV,CuE9gVM,0BAOI,qCvE0gVV,CuEjhVM,yBAOI,oCvE6gVV,CuEphVM,0BAOI,+BvEghVV,CuEvhVM,oBAOI,yBvEmhVV,CuE1hVM,qBAOI,+BvEshVV,CuE7hVM,mBAOI,6BvEyhVV,CuEhiVM,sBAOI,2BvE4hVV,CuEniVM,wBAOI,6BvE+hVV,CuEtiVM,uBAOI,4BvEkiVV,CuEziVM,gBAOI,kBvEqiVV,CuE5iVM,YAOI,iBvEwiVV,CuE/iVM,YAOI,iBvE2iVV,CuEljVM,YAOI,iBvE8iVV,CuErjVM,YAOI,iBvEijVV,CuExjVM,YAOI,iBvEojVV,CuE3jVM,YAOI,iBvEujVV,CuE9jVM,eAOI,iBvE0jVV,CuEjkVM,QAOI,kBvE6jVV,CuEpkVM,QAOI,uBvEgkVV,CuEvkVM,QAOI,sBvEmkVV,CuE1kVM,QAOI,qBvEskVV,CuE7kVM,QAOI,uBvEykVV,CuEhlVM,QAOI,qBvE4kVV,CuEnlVM,WAOI,qBvE+kVV,CuEtlVM,SAOI,gDvEmlVV,CuE1lVM,SAOI,0DvEulVV,CuE9lVM,SAOI,wDvE2lVV,CuElmVM,SAOI,sDvE+lVV,CuEtmVM,SAOI,0DvEmmVV,CuE1mVM,SAOI,sDvEumVV,CuE9mVM,YAOI,sDvE2mVV,CuElnVM,SAOI,gDvE+mVV,CuEtnVM,SAOI,0DvEmnVV,CuE1nVM,SAOI,wDvEunVV,CuE9nVM,SAOI,sDvE2nVV,CuEloVM,SAOI,0DvE+nVV,CuEtoVM,SAOI,sDvEmoVV,CuE1oVM,YAOI,sDvEuoVV,CuE9oVM,SAOI,sBvE0oVV,CuEjpVM,SAOI,2BvE6oVV,CuEppVM,SAOI,0BvEgpVV,CuEvpVM,SAOI,yBvEmpVV,CuE1pVM,SAOI,2BvEspVV,CuE7pVM,SAOI,yBvEypVV,CuEhqVM,YAOI,yBvE4pVV,CuEnqVM,SAOI,wBvE+pVV,CuEtqVM,SAOI,6BvEkqVV,CuEzqVM,SAOI,4BvEqqVV,CuE5qVM,SAOI,2BvEwqVV,CuE/qVM,SAOI,6BvE2qVV,CuElrVM,SAOI,2BvE8qVV,CuErrVM,YAOI,2BvEirVV,CuExrVM,SAOI,yBvEorVV,CuE3rVM,SAOI,8BvEurVV,CuE9rVM,SAOI,6BvE0rVV,CuEjsVM,SAOI,4BvE6rVV,CuEpsVM,SAOI,8BvEgsVV,CuEvsVM,SAOI,4BvEmsVV,CuE1sVM,YAOI,4BvEssVV,CuE7sVM,SAOI,uBvEysVV,CuEhtVM,SAOI,4BvE4sVV,CuEntVM,SAOI,2BvE+sVV,CuEttVM,SAOI,0BvEktVV,CuEztVM,SAOI,4BvEqtVV,CuE5tVM,SAOI,0BvEwtVV,CuE/tVM,YAOI,0BvE2tVV,CuEluVM,QAOI,mBvE8tVV,CuEruVM,QAOI,wBvEiuVV,CuExuVM,QAOI,uBvEouVV,CuE3uVM,QAOI,sBvEuuVV,CuE9uVM,QAOI,wBvE0uVV,CuEjvVM,QAOI,sBvE6uVV,CuEpvVM,SAOI,kDvEivVV,CuExvVM,SAOI,4DvEqvVV,CuE5vVM,SAOI,0DvEyvVV,CuEhwVM,SAOI,wDvE6vVV,CuEpwVM,SAOI,4DvEiwVV,CuExwVM,SAOI,wDvEqwVV,CuE5wVM,SAOI,kDvEywVV,CuEhxVM,SAOI,4DvE6wVV,CuEpxVM,SAOI,0DvEixVV,CuExxVM,SAOI,wDvEqxVV,CuE5xVM,SAOI,4DvEyxVV,CuEhyVM,SAOI,wDvE6xVV,CuEpyVM,SAOI,uBvEgyVV,CuEvyVM,SAOI,4BvEmyVV,CuE1yVM,SAOI,2BvEsyVV,CuE7yVM,SAOI,0BvEyyVV,CuEhzVM,SAOI,4BvE4yVV,CuEnzVM,SAOI,0BvE+yVV,CuEtzVM,SAOI,yBvEkzVV,CuEzzVM,SAOI,8BvEqzVV,CuE5zVM,SAOI,6BvEwzVV,CuE/zVM,SAOI,4BvE2zVV,CuEl0VM,SAOI,8BvE8zVV,CuEr0VM,SAOI,4BvEi0VV,CuEx0VM,SAOI,0BvEo0VV,CuE30VM,SAOI,+BvEu0VV,CuE90VM,SAOI,8BvE00VV,CuEj1VM,SAOI,6BvE60VV,CuEp1VM,SAOI,+BvEg1VV,CuEv1VM,SAOI,6BvEm1VV,CuE11VM,SAOI,wBvEs1VV,CuE71VM,SAOI,6BvEy1VV,CuEh2VM,SAOI,4BvE41VV,CuEn2VM,SAOI,2BvE+1VV,CuEt2VM,SAOI,6BvEk2VV,CuEz2VM,SAOI,2BvEq2VV,CuE52VM,UAOI,evEw2VV,CuE/2VM,UAOI,oBvE22VV,CuEl3VM,UAOI,mBvE82VV,CuEr3VM,UAOI,kBvEi3VV,CuEx3VM,UAOI,oBvEo3VV,CuE33VM,UAOI,kBvEu3VV,CuE93VM,cAOI,mBvE03VV,CuEj4VM,cAOI,wBvE63VV,CuEp4VM,cAOI,uBvEg4VV,CuEv4VM,cAOI,sBvEm4VV,CuE14VM,cAOI,wBvEs4VV,CuE74VM,cAOI,sBvEy4VV,CuEh5VM,iBAOI,sBvE44VV,CuEn5VM,iBAOI,2BvE+4VV,CuEt5VM,iBAOI,0BvEk5VV,CuEz5VM,iBAOI,yBvEq5VV,CuE55VM,iBAOI,2BvEw5VV,CuE/5VM,iBAOI,yBvE25VV,CuEl6VM,eAOI,yBvE85VV,CuEr6VM,aAOI,0BvEi6VV,CuEx6VM,gBAOI,2BvEo6VV,CACF,Ca/6VI,0B0DGI,iBAOI,oBvEy6VV,CuEh7VM,eAOI,qBvE46VV,CuEn7VM,gBAOI,oBvE+6VV,CuEt7VM,wBAOI,4BvEk7VV,CuEz7VM,sBAOI,0BvEq7VV,CuE57VM,qBAOI,yBvEw7VV,CuE/7VM,sBAOI,+BvE27VV,CuEl8VM,qBAOI,yBvE87VV,CuEr8VM,cAOI,wBvEi8VV,CuEx8VM,oBAOI,8BvEo8VV,CuE38VM,aAOI,uBvEu8VV,CuE98VM,YAOI,sBvE08VV,CuEj9VM,mBAOI,6BvE68VV,CuEp9VM,aAOI,uBvEg9VV,CuEv9VM,iBAOI,2BvEm9VV,CuE19VM,kBAOI,4BvEs9VV,CuE79VM,YAOI,sBvEy9VV,CuEh+VM,mBAOI,6BvE49VV,CuEn+VM,YAOI,sBvE+9VV,CuEt+VM,eAOI,uBvEk+VV,CuEz+VM,cAOI,4BvEq+VV,CuE5+VM,iBAOI,+BvEw+VV,CuE/+VM,sBAOI,oCvE2+VV,CuEl/VM,yBAOI,uCvE8+VV,CuEr/VM,iBAOI,qBvEi/VV,CuEx/VM,iBAOI,qBvEo/VV,CuE3/VM,mBAOI,uBvEu/VV,CuE9/VM,mBAOI,uBvE0/VV,CuEjgWM,eAOI,wBvE6/VV,CuEpgWM,iBAOI,0BvEggWV,CuEvgWM,uBAOI,gCvEmgWV,CuE1gWM,2BAOI,oCvEsgWV,CuE7gWM,yBAOI,kCvEygWV,CuEhhWM,4BAOI,gCvE4gWV,CuEnhWM,6BAOI,uCvE+gWV,CuEthWM,4BAOI,sCvEkhWV,CuEzhWM,4BAOI,sCvEqhWV,CuE5hWM,uBAOI,gCvEwhWV,CuE/hWM,qBAOI,8BvE2hWV,CuEliWM,wBAOI,4BvE8hWV,CuEriWM,0BAOI,8BvEiiWV,CuExiWM,yBAOI,6BvEoiWV,CuE3iWM,yBAOI,kCvEuiWV,CuE9iWM,uBAOI,gCvE0iWV,CuEjjWM,0BAOI,8BvE6iWV,CuEpjWM,2BAOI,qCvEgjWV,CuEvjWM,0BAOI,oCvEmjWV,CuE1jWM,2BAOI,+BvEsjWV,CuE7jWM,qBAOI,yBvEyjWV,CuEhkWM,sBAOI,+BvE4jWV,CuEnkWM,oBAOI,6BvE+jWV,CuEtkWM,uBAOI,2BvEkkWV,CuEzkWM,yBAOI,6BvEqkWV,CuE5kWM,wBAOI,4BvEwkWV,CuE/kWM,iBAOI,kBvE2kWV,CuEllWM,aAOI,iBvE8kWV,CuErlWM,aAOI,iBvEilWV,CuExlWM,aAOI,iBvEolWV,CuE3lWM,aAOI,iBvEulWV,CuE9lWM,aAOI,iBvE0lWV,CuEjmWM,aAOI,iBvE6lWV,CuEpmWM,gBAOI,iBvEgmWV,CuEvmWM,SAOI,kBvEmmWV,CuE1mWM,SAOI,uBvEsmWV,CuE7mWM,SAOI,sBvEymWV,CuEhnWM,SAOI,qBvE4mWV,CuEnnWM,SAOI,uBvE+mWV,CuEtnWM,SAOI,qBvEknWV,CuEznWM,YAOI,qBvEqnWV,CuE5nWM,UAOI,gDvEynWV,CuEhoWM,UAOI,0DvE6nWV,CuEpoWM,UAOI,wDvEioWV,CuExoWM,UAOI,sDvEqoWV,CuE5oWM,UAOI,0DvEyoWV,CuEhpWM,UAOI,sDvE6oWV,CuEppWM,aAOI,sDvEipWV,CuExpWM,UAOI,gDvEqpWV,CuE5pWM,UAOI,0DvEypWV,CuEhqWM,UAOI,wDvE6pWV,CuEpqWM,UAOI,sDvEiqWV,CuExqWM,UAOI,0DvEqqWV,CuE5qWM,UAOI,sDvEyqWV,CuEhrWM,aAOI,sDvE6qWV,CuEprWM,UAOI,sBvEgrWV,CuEvrWM,UAOI,2BvEmrWV,CuE1rWM,UAOI,0BvEsrWV,CuE7rWM,UAOI,yBvEyrWV,CuEhsWM,UAOI,2BvE4rWV,CuEnsWM,UAOI,yBvE+rWV,CuEtsWM,aAOI,yBvEksWV,CuEzsWM,UAOI,wBvEqsWV,CuE5sWM,UAOI,6BvEwsWV,CuE/sWM,UAOI,4BvE2sWV,CuEltWM,UAOI,2BvE8sWV,CuErtWM,UAOI,6BvEitWV,CuExtWM,UAOI,2BvEotWV,CuE3tWM,aAOI,2BvEutWV,CuE9tWM,UAOI,yBvE0tWV,CuEjuWM,UAOI,8BvE6tWV,CuEpuWM,UAOI,6BvEguWV,CuEvuWM,UAOI,4BvEmuWV,CuE1uWM,UAOI,8BvEsuWV,CuE7uWM,UAOI,4BvEyuWV,CuEhvWM,aAOI,4BvE4uWV,CuEnvWM,UAOI,uBvE+uWV,CuEtvWM,UAOI,4BvEkvWV,CuEzvWM,UAOI,2BvEqvWV,CuE5vWM,UAOI,0BvEwvWV,CuE/vWM,UAOI,4BvE2vWV,CuElwWM,UAOI,0BvE8vWV,CuErwWM,aAOI,0BvEiwWV,CuExwWM,SAOI,mBvEowWV,CuE3wWM,SAOI,wBvEuwWV,CuE9wWM,SAOI,uBvE0wWV,CuEjxWM,SAOI,sBvE6wWV,CuEpxWM,SAOI,wBvEgxWV,CuEvxWM,SAOI,sBvEmxWV,CuE1xWM,UAOI,kDvEuxWV,CuE9xWM,UAOI,4DvE2xWV,CuElyWM,UAOI,0DvE+xWV,CuEtyWM,UAOI,wDvEmyWV,CuE1yWM,UAOI,4DvEuyWV,CuE9yWM,UAOI,wDvE2yWV,CuElzWM,UAOI,kDvE+yWV,CuEtzWM,UAOI,4DvEmzWV,CuE1zWM,UAOI,0DvEuzWV,CuE9zWM,UAOI,wDvE2zWV,CuEl0WM,UAOI,4DvE+zWV,CuEt0WM,UAOI,wDvEm0WV,CuE10WM,UAOI,uBvEs0WV,CuE70WM,UAOI,4BvEy0WV,CuEh1WM,UAOI,2BvE40WV,CuEn1WM,UAOI,0BvE+0WV,CuEt1WM,UAOI,4BvEk1WV,CuEz1WM,UAOI,0BvEq1WV,CuE51WM,UAOI,yBvEw1WV,CuE/1WM,UAOI,8BvE21WV,CuEl2WM,UAOI,6BvE81WV,CuEr2WM,UAOI,4BvEi2WV,CuEx2WM,UAOI,8BvEo2WV,CuE32WM,UAOI,4BvEu2WV,CuE92WM,UAOI,0BvE02WV,CuEj3WM,UAOI,+BvE62WV,CuEp3WM,UAOI,8BvEg3WV,CuEv3WM,UAOI,6BvEm3WV,CuE13WM,UAOI,+BvEs3WV,CuE73WM,UAOI,6BvEy3WV,CuEh4WM,UAOI,wBvE43WV,CuEn4WM,UAOI,6BvE+3WV,CuEt4WM,UAOI,4BvEk4WV,CuEz4WM,UAOI,2BvEq4WV,CuE54WM,UAOI,6BvEw4WV,CuE/4WM,UAOI,2BvE24WV,CuEl5WM,WAOI,evE84WV,CuEr5WM,WAOI,oBvEi5WV,CuEx5WM,WAOI,mBvEo5WV,CuE35WM,WAOI,kBvEu5WV,CuE95WM,WAOI,oBvE05WV,CuEj6WM,WAOI,kBvE65WV,CuEp6WM,eAOI,mBvEg6WV,CuEv6WM,eAOI,wBvEm6WV,CuE16WM,eAOI,uBvEs6WV,CuE76WM,eAOI,sBvEy6WV,CuEh7WM,eAOI,wBvE46WV,CuEn7WM,eAOI,sBvE+6WV,CuEt7WM,kBAOI,sBvEk7WV,CuEz7WM,kBAOI,2BvEq7WV,CuE57WM,kBAOI,0BvEw7WV,CuE/7WM,kBAOI,yBvE27WV,CuEl8WM,kBAOI,2BvE87WV,CuEr8WM,kBAOI,yBvEi8WV,CuEx8WM,gBAOI,yBvEo8WV,CuE38WM,cAOI,0BvEu8WV,CuE98WM,iBAOI,2BvE08WV,CACF,CwEjgXA,0BD+CQ,MAOI,0BvE+8WV,CuEt9WM,MAOI,wBvEk9WV,CuEz9WM,MAOI,2BvEq9WV,CuE59WM,MAOI,0BvEw9WV,CACF,CwE5/WA,aD4BQ,gBAOI,wBvE69WV,CuEp+WM,sBAOI,8BvEg+WV,CuEv+WM,eAOI,uBvEm+WV,CuE1+WM,cAOI,sBvEs+WV,CuE7+WM,qBAOI,6BvEy+WV,CuEh/WM,eAOI,uBvE4+WV,CuEn/WM,mBAOI,2BvE++WV,CuEt/WM,oBAOI,4BvEk/WV,CuEz/WM,cAOI,sBvEq/WV,CuE5/WM,qBAOI,6BvEw/WV,CuE//WM,cAOI,sBvE2/WV,CACF;AyErkXA;;;;EAAA,CCGA,IACE,yDACA,+B1EykXF,C0EtkXA,0EASE,iCAAkC,CAClC,kCAAmC,CACnC,uCACA,iBAAkB,CAClB,mBAAoB,CACpB,aAAc,CACd,mB1EykXF,C0EtkXA,4CAKE,gC1EykXF,C0EtkXA,gBAEE,kC1EykXF,C2ExmXE,OACE,a3E2mXJ,C2E5mXE,OACE,a3E+mXJ,C2EhnXE,OACE,a3EmnXJ,C2EpnXE,OACE,a3EunXJ,C2ExnXE,OACE,a3E2nXJ,C2E5nXE,OACE,a3E+nXJ,C2EhoXE,OACE,a3EmoXJ,C2EpoXE,OACE,a3EuoXJ,C2ExoXE,OACE,a3E2oXJ,C2E5oXE,QACE,c3E+oXJ,C2EzoXE,QCIA,iBACA,iBACA,qB5EyoXF,C2E/oXE,OCIA,gBACA,0BACA,qB5E+oXF,C2ErpXE,OCIA,iBACA,0BACA,4B5EqpXF,C2E3pXE,OCIA,iBACA,kBACA,sB5E2pXF,C2EjqXE,OCIA,gBACA,0BACA,sB5EiqXF,C2EvqXE,QCIA,cACA,qBACA,uB5EuqXF,C6EtrXA,OACE,iBAAkB,CAClB,Y7EyrXF,C8E3rXA,OACE,oBAAqB,CACrB,sCACA,c9E8rXF,C8E5rXE,UAAO,iB9E+rXT,C8E5rXA,OACE,sCAIA,mBAAoB,CAHpB,iBAAkB,CAClB,iBAAkB,CAClB,4B9EgsXF,C+E5sXA,WACE,yCACA,2CACA,0CACA,0CACA,iD/E+sXF,C+E5sXA,cACE,UAAW,CACX,uC/E+sXF,C+E5sXA,eACE,WAAY,CACZ,sC/E+sXF,CgF9tXA,SAEE,6CACA,yDACA,mDACA,uEAJA,uBAKA,gEhFiuXF,CgF9tXA,WAEE,6CACA,yDACA,mDACA,uEAJA,yBAKA,gFhFiuXF,CgF9tXA,SAKE,uEAJA,uBAKA,4EhFiuXF,CgF9tXA,uBAPE,6CACA,yDACA,kDhF4uXF,CgFvuXA,cAKE,uEAJA,4BAKA,4EhFiuXF,CgF9tXA,SAEE,6CACA,yDACA,mDACA,uEAJA,uBAKA,gEhFiuXF,CgF9tXA,UAIE,mDACA,uEAJA,wBAKA,2DhFiuXF,CgF9tXA,mBAPE,6CACA,wDhF6uXF,CgFvuXA,SAIE,mDACA,uEAJA,uBAKA,2DhFiuXF,CgF9tXA,iBACE,gChFiuXF,CgF9tXA,yBAGE,yDACA,mDACA,uEAHA,uBAIA,6DhFiuXF,CgF3tXA,uCACE,gGASE,oBAAqB,CACrB,sBAAuB,CACvB,2BAA4B,CAC5B,mBAAoB,CACpB,sBhF8tXF,CACF,CgF3tXA,mBACE,OAAU,kBhF8tXV,CgF7tXA,IAAM,0ChFguXN,CACF,CgF9tXA,qBACE,GAAO,gChFiuXP,CgFhuXA,IAAO,mGhFmuXP,CgFluXA,IAAO,6HhFquXP,CgFpuXA,IAAO,mGhFuuXP,CgFtuXA,IAAO,+DhFyuXP,CgFxuXA,IAAO,gChF2uXP,CgF1uXA,GAAO,gChF6uXP,CACF,CgF3uXA,mBACE,IAAM,iChF8uXN,CACF,CgF5uXA,wBACE,MACE,uCACA,kBhF8uXF,CgF5uXA,IACE,SAAU,CACV,gDhF8uXF,CACF,CgF3uXA,mBACE,IACE,yGhF6uXF,CACF,CgF1uXA,oBACE,GAAK,wBhF6uXL,CgF5uXA,GAAK,uBhF+uXL,CgF9uXA,OAAU,wBhFivXV,CgFhvXA,QAAW,uBhFmvXX,CgFlvXA,IAAM,wBhFqvXN,CgFpvXA,IAAM,uBhFuvXN,CgFtvXA,IAAM,wBhFyvXN,CgFxvXA,IAAM,uBhF2vXN,CgF1vXA,OAAY,sBhF6vXZ,CACF,CgF3vXA,mBACE,GAAK,sBhF8vXL,CgF7vXA,GAAO,uBhFgwXP,CACF,CiFp5XA,cACE,uBjFs5XF,CiFn5XA,eACE,wBjFs5XF,CiFn5XA,eACE,wBjFs5XF,CiFn5XA,oBACE,oBjFs5XF,CiFn5XA,kBACE,oBjFs5XF,CiFn5XA,mDAEE,mBjFs5XF,CiFn5XA,cACE,0CjFs5XF,CkFh7XA,UACE,oBAAqB,CACrB,UAAW,CACX,eAAgB,CAChB,iBAAkB,CAClB,qBCmCwB,CDlCxB,WlFm7XF,CkFh7XA,0BAEE,MAAO,CACP,iBAAkB,CAClB,iBAAkB,CAClB,UAAW,CACX,oClFm7XF,CkFh7XA,aACE,mBlFm7XF,CkFh7XA,aACE,alFm7XF,CkFh7XA,YACE,4BlFm7XF,CoF18XE,aAAsC,cpFg9XxC,CoFh9XE,aAAsC,cpFo9XxC,CoFp9XE,aAAsC,cpFw9XxC,CoFx9XE,aAAsC,cpF49XxC,CoF59XE,aAAsC,cpFg+XxC,CoFh+XE,aAAsC,cpFo+XxC,CoFp+XE,aAAsC,cpFw+XxC,CoFx+XE,aAAsC,cpF4+XxC,CoF5+XE,aAAsC,cpFg/XxC,CoFh/XE,aAAsC,cpFo/XxC,CoFp/XE,qBAAsC,epFw/XxC,CoFx/XE,4BAAsC,epF4/XxC,CoF5/XE,gEAAsC,epFogYxC,CoFpgYE,cAAsC,YpFwgYxC,CoFxgYE,0CAAsC,epFghYxC,CoFhhYE,uBAAsC,epFohYxC,CoFphYE,4CAAsC,epF4hYxC,CoF5hYE,uBAAsC,epFgiYxC,CoFhiYE,0CAAsC,epFwiYxC,CoFxiYE,gBAAsC,epF4iYxC,CoF5iYE,oEAAsC,epFojYxC,CoFpjYE,qBAAsC,epFwjYxC,CoFxjYE,+DAAsC,epFokYxC,CoFpkYE,uBAAsC,epFwkYxC,CoFxkYE,gBAAsC,epF4kYxC,CoF5kYE,uBAAsC,epFglYxC,CoFhlYE,sBAAsC,epFolYxC,CoFplYE,iDAAsC,epF4lYxC,CoF5lYE,+BAAsC,epFgmYxC,CoFhmYE,uCAAsC,epFomYxC,CoFpmYE,iDAAsC,epF4mYxC,CoF5mYE,6BAAsC,epFgnYxC,CoFhnYE,0CAAsC,epFwnYxC,CoFxnYE,gDAAsC,epFgoYxC,CoFhoYE,qBAAsC,epFooYxC,CoFpoYE,sDAAsC,epF4oYxC,CoF5oYE,gBAAsC,epFgpYxC,CoFhpYE,gBAAsC,epFopYxC,CoFppYE,oDAAsC,epF4pYxC,CoF5pYE,kEAAsC,epFoqYxC,CoFpqYE,+BAAsC,epFwqYxC,CoFxqYE,wBAAsC,epF4qYxC,CoF5qYE,uBAAsC,epFgrYxC,CoFhrYE,4BAAsC,epForYxC,CoFprYE,gEAAsC,epF4rYxC,CoF5rYE,gDAAsC,epFosYxC,CoFpsYE,iDAAsC,epF4sYxC,CoF5sYE,0BAAsC,epFgtYxC,CoFhtYE,6CAAsC,epFwtYxC,CoFxtYE,qCAAsC,epF4tYxC,CoF5tYE,gBAAsC,epFguYxC,CoFhuYE,oDAAsC,epFwuYxC,CoFxuYE,2BAAsC,epF4uYxC,CoF5uYE,uBAAsC,epFgvYxC,CoFhvYE,uBAAsC,epFovYxC,CoFpvYE,0CAAsC,epF4vYxC,CoF5vYE,+BAAsC,epFgwYxC,CoFhwYE,kDAAsC,epFwwYxC,CoFxwYE,6CAAsC,epFgxYxC,CoFhxYE,kCAAsC,epFwxYxC,CoFxxYE,kBAAsC,epF4xYxC,CoF5xYE,oBAAsC,epFgyYxC,CoFhyYE,mBAAsC,epFoyYxC,CoFpyYE,uBAAsC,epFwyYxC,CoFxyYE,wBAAsC,epF4yYxC,CoF5yYE,iDAAsC,epFozYxC,CoFpzYE,gBAAsC,epFwzYxC,CoFxzYE,8DAAsC,epFg0YxC,CoFh0YE,qCAAsC,epFo0YxC,CoFp0YE,0CAAsC,epF40YxC,CoF50YE,qBAAsC,epFg1YxC,CoFh1YE,+CAAsC,epFw1YxC,CoFx1YE,mCAAsC,epF41YxC,CoF51YE,+CAAsC,epFo2YxC,CoFp2YE,iBAAsC,epFw2YxC,CoFx2YE,gDAAsC,epFg3YxC,CoFh3YE,yBAAsC,epFo3YxC,CoFp3YE,aAAsC,WpFw3YxC,CoFx3YE,yBAAsC,epF43YxC,CoF53YE,wCAAsC,epFo4YxC,CoFp4YE,oBAAsC,epFw4YxC,CoFx4YE,uBAAsC,epF44YxC,CoF54YE,oBAAsC,epFg5YxC,CoFh5YE,2CAAsC,epFw5YxC,CoFx5YE,6BAAsC,epF45YxC,CoF55YE,0BAAsC,epFg6YxC,CoFh6YE,mDAAsC,epFw6YxC,CoFx6YE,sBAAsC,epF46YxC,CoF56YE,sBAAsC,epFg7YxC,CoFh7YE,yBAAsC,epFo7YxC,CoFp7YE,gBAAsC,epFw7YxC,CoFx7YE,sBAAsC,epF47YxC,CoF57YE,qCAAsC,epFg8YxC,CoFh8YE,yCAAsC,epFw8YxC,CoFx8YE,2EAAsC,epFo9YxC,CoFp9YE,sBAAsC,epFw9YxC,CoFx9YE,0CAAsC,epFg+YxC,CoFh+YE,2BAAsC,epFo+YxC,CoFp+YE,wFAAsC,epFg/YxC,CoFh/YE,iEAAsC,epFw/YxC,CoFx/YE,qBAAsC,epF4/YxC,CoF5/YE,yBAAsC,epFggZxC,CoFhgZE,aAAsC,WpFogZxC,CoFpgZE,gDAAsC,epF4gZxC,CoF5gZE,mBAAsC,epFghZxC,CoFhhZE,wBAAsC,epFohZxC,CoFphZE,sDAAsC,epF4hZxC,CoF5hZE,eAAsC,epFgiZxC,CoFhiZE,iBAAsC,epFoiZxC,CoFpiZE,yBAAsC,epFwiZxC,CoFxiZE,2CAAsC,epFgjZxC,CoFhjZE,yBAAsC,epFojZxC,CoFpjZE,iCAAsC,epFwjZxC,CoFxjZE,kCAAsC,epFgkZxC,CoFhkZE,sBAAsC,epFokZxC,CoFpkZE,4BAAsC,epFwkZxC,CoFxkZE,sBAAsC,epF4kZxC,CoF5kZE,sBAAsC,epFglZxC,CoFhlZE,oDAAsC,epFwlZxC,CoFxlZE,6CAAsC,epFgmZxC,CoFhmZE,6DAAsC,epFwmZxC,CoFxmZE,gCAAsC,epF4mZxC,CoF5mZE,4DAAsC,epFonZxC,CoFpnZE,mCAAsC,epF4nZxC,CoF5nZE,0BAAsC,epFgoZxC,CoFhoZE,4BAAsC,epFooZxC,CoFpoZE,uBAAsC,epFwoZxC,CoFxoZE,iBAAsC,epF4oZxC,CoF5oZE,wCAAsC,epFgpZxC,CoFhpZE,4DAAsC,epFwpZxC,CoFxpZE,uBAAsC,epF4pZxC,CoF5pZE,kBAAsC,epFgqZxC,CoFhqZE,uCAAsC,epFwqZxC,CoFxqZE,6BAAsC,epF4qZxC,CoF5qZE,sBAAsC,epFgrZxC,CoFhrZE,gDAAsC,epFwrZxC,CoFxrZE,sBAAsC,epF4rZxC,CoF5rZE,mBAAsC,epFgsZxC,CoFhsZE,0DAAsC,epFwsZxC,CoFxsZE,gCAAsC,epF4sZxC,CoF5sZE,uBAAsC,epFgtZxC,CoFhtZE,sBAAsC,epFotZxC,CoFptZE,+BAAsC,epFwtZxC,CoFxtZE,mCAAsC,epFguZxC,CoFhuZE,wBAAsC,epFouZxC,CoFpuZE,gDAAsC,epF4uZxC,CoF5uZE,+CAAsC,epFovZxC,CoFpvZE,+DAAsC,epF4vZxC,CoF5vZE,+CAAsC,epFowZxC,CoFpwZE,gBAAsC,epFwwZxC,CoFxwZE,4BAAsC,epF4wZxC,CoF5wZE,0BAAsC,epFgxZxC,CoFhxZE,qBAAsC,epFoxZxC,CoFpxZE,sBAAsC,epFwxZxC,CoFxxZE,4DAAsC,epFgyZxC,CoFhyZE,+BAAsC,epFoyZxC,CoFpyZE,wDAAsC,epF4yZxC,CoF5yZE,8DAAsC,epFozZxC,CoFpzZE,gDAAsC,epF4zZxC,CoF5zZE,+BAAsC,epFg0ZxC,CoFh0ZE,uDAAsC,epFw0ZxC,CoFx0ZE,mBAAsC,epF40ZxC,CoF50ZE,mDAAsC,epFo1ZxC,CoFp1ZE,kBAAsC,epFw1ZxC,CoFx1ZE,uBAAsC,epF41ZxC,CoF51ZE,uBAAsC,epFg2ZxC,CoFh2ZE,gBAAsC,epFo2ZxC,CoFp2ZE,oBAAsC,epFw2ZxC,CoFx2ZE,mBAAsC,epF42ZxC,CoF52ZE,6CAAsC,epFo3ZxC,CoFp3ZE,yBAAsC,epFw3ZxC,CoFx3ZE,0BAAsC,epF43ZxC,CoF53ZE,oBAAsC,epFg4ZxC,CoFh4ZE,0CAAsC,epFw4ZxC,CoFx4ZE,gBAAsC,epF44ZxC,CoF54ZE,+BAAsC,epFg5ZxC,CoFh5ZE,oBAAsC,YpFo5ZxC,CoFp5ZE,gDAAsC,epF45ZxC,CoF55ZE,uBAAsC,epFg6ZxC,CoFh6ZE,qCAAsC,epFw6ZxC,CoFx6ZE,iBAAsC,epF46ZxC,CoF56ZE,wCAAsC,epFo7ZxC,CoFp7ZE,yDAAsC,epF47ZxC,CoF57ZE,qBAAsC,epFg8ZxC,CoFh8ZE,mBAAsC,epFo8ZxC,CoFp8ZE,4CAAsC,epF48ZxC,CoF58ZE,uCAAsC,epFo9ZxC,CoFp9ZE,eAAsC,epFw9ZxC,CoFx9ZE,sCAAsC,epF49ZxC,CoF59ZE,sBAAsC,epFg+ZxC,CoFh+ZE,uBAAsC,epFo+ZxC,CoFp+ZE,gEAAsC,epFg/ZxC,CoFh/ZE,6CAAsC,epFw/ZxC,CoFx/ZE,gBAAsC,epF4/ZxC,CoF5/ZE,oBAAsC,epFggaxC,CoFhgaE,6CAAsC,epFwgaxC,CoFxgaE,8CAAsC,epFghaxC,CoFhhaE,6BAAsC,epFohaxC,CoFphaE,gBAAsC,epFwhaxC,CoFxhaE,uBAAsC,epF4haxC,CoF5haE,uBAAsC,epFgiaxC,CoFhiaE,yCAAsC,epFwiaxC,CoFxiaE,oBAAsC,epF4iaxC,CoF5iaE,4CAAsC,epFojaxC,CoFpjaE,8BAAsC,epFwjaxC,CoFxjaE,iDAAsC,epFgkaxC,CoFhkaE,sBAAsC,epFokaxC,CoFpkaE,gBAAsC,epFwkaxC,CoFxkaE,gDAAsC,epFglaxC,CoFhlaE,oFAAsC,epF4laxC,CoF5laE,kBAAsC,epFgmaxC,CoFhmaE,uBAAsC,epFomaxC,CoFpmaE,iBAAsC,epFwmaxC,CoFxmaE,qBAAsC,epF4maxC,CoF5maE,sBAAsC,epFgnaxC,CoFhnaE,sCAAsC,epFwnaxC,CoFxnaE,cAAsC,epF4naxC,CoF5naE,gBAAsC,epFgoaxC,CoFhoaE,8BAAsC,epFooaxC,CoFpoaE,gBAAsC,epFwoaxC,CoFxoaE,sBAAsC,epF4oaxC,CoF5oaE,sBAAsC,epFgpaxC,CoFhpaE,qBAAsC,epFopaxC,CoFppaE,qCAAsC,epF4paxC,CoF5paE,+BAAsC,epFgqaxC,CoFhqaE,mDAAsC,epFwqaxC,CoFxqaE,wBAAsC,epF4qaxC,CoF5qaE,+CAAsC,epForaxC,CoFpraE,mFAAsC,epFosaxC,CoFpsaE,6BAAsC,epFwsaxC,CoFxsaE,qBAAsC,epF4saxC,CoF5saE,4CAAsC,epFotaxC,CoFptaE,wBAAsC,epFwtaxC,CoFxtaE,oBAAsC,epF4taxC,CoF5taE,iBAAsC,epFguaxC,CoFhuaE,kBAAsC,epFouaxC,CoFpuaE,aAAsC,WpFwuaxC,CoFxuaE,2CAAsC,epFgvaxC,CoFhvaE,iBAAsC,epFovaxC,CoFpvaE,8CAAsC,epF4vaxC,CoF5vaE,iBAAsC,epFgwaxC,CoFhwaE,aAAsC,WpFowaxC,CoFpwaE,iCAAsC,epFwwaxC,CoFxwaE,mBAAsC,epF4waxC,CoF5waE,kGAAsC,epF4xaxC,CoF5xaE,iCAAsC,epFgyaxC,CoFhyaE,8CAAsC,epFwyaxC,CoFxyaE,wCAAsC,epF4yaxC,CoF5yaE,mBAAsC,epFgzaxC,CoFhzaE,yBAAsC,epFozaxC,CoFpzaE,wBAAsC,epFwzaxC,CoFxzaE,kBAAsC,epF4zaxC,CoF5zaE,iBAAsC,epFg0axC,CoFh0aE,iBAAsC,epFo0axC,CoFp0aE,uBAAsC,epFw0axC,CoFx0aE,iBAAsC,epF40axC,CoF50aE,aAAsC,WpFg1axC,CoFh1aE,aAAsC,WpFo1axC,CoFp1aE,yBAAsC,epFw1axC,CoFx1aE,0GAAsC,epFw2axC,CoFx2aE,qBAAsC,epF42axC,CoF52aE,oBAAsC,epFg3axC,CoFh3aE,yCAAsC,epFw3axC,CoFx3aE,iDAAsC,epFg4axC,CoFh4aE,yBAAsC,epFo4axC,CoFp4aE,sBAAsC,epFw4axC,CoFx4aE,oBAAsC,epF44axC,CoF54aE,yBAAsC,epFg5axC,CoFh5aE,0BAAsC,epFo5axC,CoFp5aE,qBAAsC,epFw5axC,CoFx5aE,oBAAsC,epF45axC,CoF55aE,iBAAsC,epFg6axC,CoFh6aE,2BAAsC,epFo6axC,CoFp6aE,iCAAsC,epFw6axC,CoFx6aE,0CAAsC,epFg7axC,CoFh7aE,qDAAsC,epFw7axC,CoFx7aE,qBAAsC,epF47axC,CoF57aE,wBAAsC,epFg8axC,CoFh8aE,uBAAsC,epFo8axC,CoFp8aE,gBAAsC,epFw8axC,CoFx8aE,6FAAsC,epFw9axC,CoFx9aE,8DAAsC,epFg+axC,CoFh+aE,aAAsC,WpFo+axC,CoFp+aE,uCAAsC,epF4+axC,CoF5+aE,qCAAsC,epFg/axC,CoFh/aE,gBAAsC,epFo/axC,CoFp/aE,+BAAsC,epFw/axC,CoFx/aE,oBAAsC,epF4/axC,CoF5/aE,8CAAsC,epFogbxC,CoFpgbE,yBAAsC,epFwgbxC,CoFxgbE,0DAAsC,epFghbxC,CoFhhbE,uBAAsC,epFohbxC,CoFphbE,eAAsC,epFwhbxC,CoFxhbE,oBAAsC,epF4hbxC,CoF5hbE,iBAAsC,epFgibxC,CoFhibE,qBAAsC,epFoibxC,CoFpibE,6BAAsC,epFwibxC,CoFxibE,uBAAsC,epF4ibxC,CoF5ibE,0BAAsC,epFgjbxC,CoFhjbE,aAAsC,WpFojbxC,CoFpjbE,yBAAsC,epFwjbxC,CoFxjbE,yBAAsC,epF4jbxC,CoF5jbE,uBAAsC,epFgkbxC,CoFhkbE,2BAAsC,epFokbxC,CoFpkbE,4CAAsC,epF4kbxC,CoF5kbE,sBAAsC,epFglbxC,CoFhlbE,+BAAsC,epFolbxC,CoFplbE,iCAAsC,epF4lbxC,CoF5lbE,yBAAsC,epFgmbxC,CoFhmbE,uDAAsC,epFwmbxC,CoFxmbE,gBAAsC,epF4mbxC,CoF5mbE,kBAAsC,epFgnbxC,CoFhnbE,iBAAsC,epFonbxC,CoFpnbE,eAAsC,epFwnbxC,CoFxnbE,sBAAsC,epF4nbxC,CoF5nbE,kDAAsC,epFoobxC,CoFpobE,iDAAsC,epF4obxC,CoF5obE,4BAAsC,epFgpbxC,CoFhpbE,oDAAsC,epFwpbxC,CoFxpbE,qCAAsC,epFgqbxC,CoFhqbE,6CAAsC,epFwqbxC,CoFxqbE,wBAAsC,epF4qbxC,CoF5qbE,+BAAsC,epFgrbxC,CoFhrbE,kBAAsC,epForbxC,CoFprbE,uBAAsC,epFwrbxC,CoFxrbE,+BAAsC,epF4rbxC,CoF5rbE,oCAAsC,epFgsbxC,CoFhsbE,iBAAsC,epFosbxC,CoFpsbE,uBAAsC,epFwsbxC,CoFxsbE,iBAAsC,epF4sbxC,CoF5sbE,2CAAsC,epFotbxC,CoFptbE,qDAAsC,epF4tbxC,CoF5tbE,iDAAsC,epFoubxC,CoFpubE,kBAAsC,epFwubxC,CoFxubE,6BAAsC,epF4ubxC,CoF5ubE,qBAAsC,epFgvbxC,CoFhvbE,kDAAsC,epFwvbxC,CoFxvbE,yBAAsC,epF4vbxC,CoF5vbE,0BAAsC,epFgwbxC,CoFhwbE,gCAAsC,epFowbxC,CoFpwbE,mDAAsC,epF4wbxC,CoF5wbE,iBAAsC,epFgxbxC,CoFhxbE,oBAAsC,epFoxbxC,CoFpxbE,4CAAsC,epF4xbxC,CoF5xbE,oDAAsC,epFoybxC,CoFpybE,4BAAsC,epFwybxC,CoFxybE,qBAAsC,epF4ybxC,CoF5ybE,iBAAsC,epFgzbxC,CoFhzbE,0BAAsC,epFozbxC,CoFpzbE,wBAAsC,epFwzbxC,CoFxzbE,6BAAsC,epF4zbxC,CoF5zbE,0CAAsC,epFo0bxC,CoFp0bE,8CAAsC,epF40bxC,CoF50bE,iDAAsC,epFo1bxC,CoFp1bE,wBAAsC,epFw1bxC,CoFx1bE,qDAAsC,epFg2bxC,CoFh2bE,sBAAsC,epFo2bxC,CoFp2bE,sDAAsC,epF42bxC,CoF52bE,qBAAsC,epFg3bxC,CoFh3bE,6CAAsC,epFw3bxC,CoFx3bE,aAAsC,WpF43bxC,CoF53bE,gBAAsC,epFg4bxC,CoFh4bE,2CAAsC,epFw4bxC,CoFx4bE,kDAAsC,epFg5bxC,CoFh5bE,uCAAsC,epFw5bxC,CoFx5bE,uBAAsC,epF45bxC,CoF55bE,6BAAsC,epFg6bxC,CoFh6bE,qBAAsC,epFo6bxC,CoFp6bE,gBAAsC,epFw6bxC,CoFx6bE,sDAAsC,epFg7bxC,CoFh7bE,sBAAsC,epFo7bxC,CoFp7bE,kBAAsC,epFw7bxC,CoFx7bE,sBAAsC,epF47bxC,CoF57bE,mBAAsC,epFg8bxC,CoFh8bE,uBAAsC,epFo8bxC,CoFp8bE,6BAAsC,epFw8bxC,CoFx8bE,sBAAsC,epF48bxC,CoF58bE,mDAAsC,epFo9bxC,CoFp9bE,qDAAsC,epF49bxC,CoF59bE,qBAAsC,epFg+bxC,CoFh+bE,oCAAsC,epFo+bxC,CoFp+bE,gDAAsC,epF4+bxC,CoF5+bE,yDAAsC,epFw/bxC,CoFx/bE,mCAAsC,epFggcxC,CoFhgcE,qBAAsC,epFogcxC,CoFpgcE,yCAAsC,epF4gcxC,CoF5gcE,qBAAsC,epFghcxC,CoFhhcE,uBAAsC,epFohcxC,CoFphcE,gBAAsC,epFwhcxC,CoFxhcE,uBAAsC,epF4hcxC,CoF5hcE,wBAAsC,epFgicxC,CoFhicE,sBAAsC,epFoicxC,CoFpicE,qBAAsC,epFwicxC,CoFxicE,mDAAsC,epFgjcxC,CoFhjcE,sDAAsC,epFwjcxC,CoFxjcE,gBAAsC,epF4jcxC,CoF5jcE,gDAAsC,epFokcxC,CoFpkcE,mBAAsC,epFwkcxC,CoFxkcE,8CAAsC,epFglcxC,CoFhlcE,gBAAsC,epFolcxC,CoFplcE,oBAAsC,epFwlcxC,CoFxlcE,uBAAsC,epF4lcxC,CoF5lcE,mBAAsC,epFgmcxC,CoFhmcE,uBAAsC,epFomcxC,CoFpmcE,iCAAsC,epFwmcxC,CoFxmcE,6BAAsC,epF4mcxC,CoF5mcE,sDAAsC,epFoncxC,CoFpncE,+CAAsC,epF4ncxC,CoF5ncE,sDAAsC,epFoocxC,CoFpocE,+BAAsC,epFwocxC,CoFxocE,0CAAsC,epFgpcxC,CoFhpcE,+CAAsC,epFwpcxC,CoFxpcE,2BAAsC,epF4pcxC,CoF5pcE,iBAAsC,epFgqcxC,CoFhqcE,gDAAsC,epFwqcxC,CoFxqcE,gBAAsC,epF4qcxC,CoF5qcE,oBAAsC,epFgrcxC,CoFhrcE,0BAAsC,epForcxC,CoFprcE,8CAAsC,epF4rcxC,CoF5rcE,sBAAsC,epFgscxC,CoFhscE,gBAAsC,epFoscxC,CoFpscE,kBAAsC,epFwscxC,CoFxscE,iBAAsC,epF4scxC,CoF5scE,sBAAsC,epFgtcxC,CoFhtcE,eAAsC,epFotcxC,CoFptcE,oBAAsC,epFwtcxC,CoFxtcE,uBAAsC,epF4tcxC,CoF5tcE,yBAAsC,epFgucxC,CoFhucE,yBAAsC,epFoucxC,CoFpucE,sBAAsC,epFwucxC,CoFxucE,sCAAsC,epF4ucxC,CoF5ucE,sDAAsC,epFovcxC,CoFpvcE,6FAAsC,epFowcxC,CoFpwcE,4CAAsC,epF4wcxC,CoF5wcE,iBAAsC,epFgxcxC,CoFhxcE,0BAAsC,epFoxcxC,CoFpxcE,qBAAsC,epFwxcxC,CoFxxcE,eAAsC,epF4xcxC,CoF5xcE,sCAAsC,epFoycxC,CoFpycE,mBAAsC,epFwycxC,CoFxycE,mDAAsC,epFgzcxC,CoFhzcE,oBAAsC,epFozcxC,CoFpzcE,oBAAsC,epFwzcxC,CoFxzcE,sDAAsC,epFg0cxC,CoFh0cE,oBAAsC,epFo0cxC,CoFp0cE,8CAAsC,epF40cxC,CoF50cE,mBAAsC,epFg1cxC,CoFh1cE,oBAAsC,epFo1cxC,CoFp1cE,oDAAsC,epFg2cxC,CoFh2cE,iBAAsC,epFo2cxC,CoFp2cE,gDAAsC,epF42cxC,CoF52cE,8CAAsC,epFo3cxC,CoFp3cE,wDAAsC,epF43cxC,CoF53cE,uBAAsC,epFg4cxC,CoFh4cE,mBAAsC,epFo4cxC,CoFp4cE,0BAAsC,epFw4cxC,CoFx4cE,kBAAsC,epF44cxC,CoF54cE,oBAAsC,epFg5cxC,CoFh5cE,kBAAsC,epFo5cxC,CoFp5cE,iDAAsC,epF45cxC,CoF55cE,6BAAsC,epFg6cxC,CoFh6cE,4BAAsC,epFo6cxC,CoFp6cE,0DAAsC,epF46cxC,CoF56cE,qBAAsC,epFg7cxC,CoFh7cE,mBAAsC,epFo7cxC,CoFp7cE,kDAAsC,epFw7cxC,CoFx7cE,8DAAsC,epFo8cxC,CoFp8cE,mBAAsC,epFw8cxC,CoFx8cE,kCAAsC,epF48cxC,CoF58cE,oBAAsC,epFg9cxC,CoFh9cE,sDAAsC,epFw9cxC,CoFx9cE,mCAAsC,epF49cxC,CoF59cE,uBAAsC,epFg+cxC,CoFh+cE,+CAAsC,epFw+cxC,CoFx+cE,oBAAsC,epF4+cxC,CoF5+cE,6CAAsC,epFo/cxC,CoFp/cE,yDAAsC,epF4/cxC,CoF5/cE,wBAAsC,epFggdxC,CoFhgdE,0DAAsC,epFwgdxC,CoFxgdE,sDAAsC,epFghdxC,CoFhhdE,iEAAsC,epFwhdxC,CoFxhdE,oBAAsC,epF4hdxC,CoF5hdE,kBAAsC,epFgidxC,CoFhidE,eAAsC,epFoidxC,CoFpidE,6BAAsC,epFwidxC,CoFxidE,iBAAsC,epF4idxC,CoF5idE,0BAAsC,epFgjdxC,CoFhjdE,4GAAsC,epFgkdxC,CoFhkdE,gBAAsC,epFokdxC,CoFpkdE,sBAAsC,epFwkdxC,CoFxkdE,iEAAsC,epFoldxC,CoFpldE,gEAAsC,epF4ldxC,CoF5ldE,qBAAsC,epFgmdxC,CoFhmdE,oDAAsC,epFwmdxC,CoFxmdE,iBAAsC,epF4mdxC,CoF5mdE,gDAAsC,epFondxC,CoFpndE,uCAAsC,epF4ndxC,CoF5ndE,uBAAsC,epFgodxC,CoFhodE,gBAAsC,epFoodxC,CoFpodE,kBAAsC,epFwodxC,CoFxodE,8EAAsC,epFopdxC,CoFppdE,mBAAsC,epFwpdxC,CoFxpdE,6BAAsC,epF4pdxC,CoF5pdE,gBAAsC,epFgqdxC,CoFhqdE,iBAAsC,epFoqdxC,CoFpqdE,iCAAsC,epFwqdxC,CoFxqdE,sCAAsC,epFgrdxC,CoFhrdE,8CAAsC,epFwrdxC,CoFxrdE,yBAAsC,epF4rdxC,CoF5rdE,0DAAsC,epFosdxC,CoFpsdE,+BAAsC,epFwsdxC,CoFxsdE,qBAAsC,epF4sdxC,CoF5sdE,sBAAsC,epFgtdxC,CoFhtdE,wFAAsC,epF4tdxC,CoF5tdE,8CAAsC,epFoudxC,CoFpudE,+CAAsC,epF4udxC,CoF5udE,iDAAsC,epFovdxC,CoFpvdE,qBAAsC,epFwvdxC,CoFxvdE,2BAAsC,epF4vdxC,CoF5vdE,iDAAsC,epFowdxC,CoFpwdE,sBAAsC,epFwwdxC,CoFxwdE,oFAAsC,epFoxdxC,CoFpxdE,oBAAsC,epFwxdxC,CoFxxdE,4CAAsC,epFgydxC,CoFhydE,sDAAsC,epFwydxC,CoFxydE,yBAAsC,epF4ydxC,CoF5ydE,iEAAsC,epFozdxC,CoFpzdE,2BAAsC,epFwzdxC,CoFxzdE,wBAAsC,epF4zdxC,CoF5zdE,4DAAsC,epFw0dxC,CoFx0dE,6BAAsC,epF40dxC,CoF50dE,yBAAsC,epFg1dxC,CoFh1dE,8BAAsC,epFo1dxC,CoFp1dE,+CAAsC,epF41dxC,CoF51dE,uCAAsC,epFo2dxC,CoFp2dE,iBAAsC,epFw2dxC,CoFx2dE,iCAAsC,epF42dxC,CoF52dE,uBAAsC,epFg3dxC,CoFh3dE,yBAAsC,epFo3dxC,CoFp3dE,mBAAsC,epFw3dxC,CoFx3dE,8BAAsC,epF43dxC,CoF53dE,uDAAsC,epFo4dxC,CoFp4dE,+CAAsC,epF44dxC,CoF54dE,kBAAsC,epFg5dxC,CoFh5dE,wDAAsC,epFw5dxC,CoFx5dE,iBAAsC,epF45dxC,CoF55dE,qBAAsC,epFg6dxC,CoFh6dE,kBAAsC,epFo6dxC,CoFp6dE,mCAAsC,epFw6dxC,CoFx6dE,kBAAsC,epF46dxC,CoF56dE,2BAAsC,epFg7dxC,CoFh7dE,oBAAsC,epFo7dxC,CoFp7dE,aAAsC,WpFw7dxC,CoFx7dE,2CAAsC,epFg8dxC,CoFh8dE,qBAAsC,epFo8dxC,CoFp8dE,aAAsC,WpFw8dxC,CoFx8dE,8DAAsC,epFg9dxC,CoFh9dE,kDAAsC,epFw9dxC,CoFx9dE,aAAsC,WpF49dxC,CoF59dE,qBAAsC,epFg+dxC,CoFh+dE,qBAAsC,epFo+dxC,CoFp+dE,sCAAsC,epF4+dxC,CoF5+dE,4DAAsC,epFo/dxC,CoFp/dE,+BAAsC,epFw/dxC,CoFx/dE,kBAAsC,epF4/dxC,CoF5/dE,oCAAsC,epFogexC,CoFpgeE,+DAAsC,epFghexC,CoFhheE,8BAAsC,epFohexC,CoFpheE,yDAAsC,epF4hexC,CoF5heE,yBAAsC,epFgiexC,CoFhieE,uBAAsC,epFoiexC,CoFpieE,oBAAsC,epFwiexC,CoFxieE,2DAAsC,epFgjexC,CoFhjeE,kBAAsC,epFojexC,CoFpjeE,oBAAsC,YpFwjexC,CoFxjeE,0BAAsC,epF4jexC,CoF5jeE,oDAAsC,epFokexC,CoFpkeE,8BAAsC,epFwkexC,CoFxkeE,8BAAsC,epF4kexC,CoF5keE,wBAAsC,epFglexC,CoFhleE,uBAAsC,epFolexC,CoFpleE,qDAAsC,epF4lexC,CoF5leE,gBAAsC,epFgmexC,CoFhmeE,kDAAsC,epFwmexC,CoFxmeE,uCAAsC,epF4mexC,CoF5meE,kCAAsC,epFgnexC,CoFhneE,+DAAsC,epFwnexC,CoFxneE,yBAAsC,epF4nexC,CoF5neE,kDAAsC,epFwoexC,CoFxoeE,uBAAsC,epF4oexC,CoF5oeE,wBAAsC,epFgpexC,CoFhpeE,aAAsC,WpFopexC,CoFppeE,gBAAsC,epFwpexC,CoFxpeE,gBAAsC,epF4pexC,CoF5peE,+BAAsC,epFoqexC,CoFpqeE,8BAAsC,epFwqexC,CoFxqeE,0CAAsC,epFgrexC,CoFhreE,0BAAsC,epForexC,CoFpreE,sBAAsC,epFwrexC,CoFxreE,sBAAsC,epF4rexC,CoF5reE,yBAAsC,epFgsexC,CoFhseE,qBAAsC,epFosexC,CoFpseE,yBAAsC,epFwsexC,CoFxseE,+CAAsC,epFgtexC,CoFhteE,0BAAsC,epFotexC,CoFpteE,gBAAsC,epFwtexC,CoFxteE,8CAAsC,epFguexC,CoFhueE,iBAAsC,epFouexC,CoFpueE,wBAAsC,epFwuexC,CoFxueE,iEAAsC,epFovexC,CoFpveE,iBAAsC,epFwvexC,CoFxveE,0DAAsC,epFgwexC,CoFhweE,8BAAsC,epFowexC,CoFpweE,yDAAsC,epF4wexC,CoF5weE,wBAAsC,epFgxexC,CoFhxeE,4CAAsC,epFwxexC,CoFxxeE,2BAAsC,epF4xexC,CoF5xeE,uBAAsC,epFgyexC,CoFhyeE,2CAAsC,epFwyexC,CoFxyeE,yBAAsC,epF4yexC,CoF5yeE,kCAAsC,epFgzexC,CoFhzeE,aAAsC,WpFozexC,CoFpzeE,gBAAsC,epFwzexC,CoFxzeE,+CAAsC,epFg0exC,CoFh0eE,yBAAsC,epFo0exC,CoFp0eE,4BAAsC,epFw0exC,CoFx0eE,iBAAsC,epF40exC,CoF50eE,0BAAsC,epFg1exC,CoFh1eE,2CAAsC,epFw1exC,CoFx1eE,yBAAsC,epF41exC,CoF51eE,uBAAsC,epFg2exC,CoFh2eE,oDAAsC,epFw2exC,CoFx2eE,6CAAsC,epFg3exC,CoFh3eE,wBAAsC,epFo3exC,CoFp3eE,gDAAsC,epF43exC,CoF53eE,8BAAsC,epFg4exC,CoFh4eE,4CAAsC,epFw4exC,CoFx4eE,uBAAsC,epF44exC,CoF54eE,aAAsC,WpFg5exC,CoFh5eE,gHAAsC,epFg6exC,CoFh6eE,gBAAsC,epFo6exC,CoFp6eE,wBAAsC,epFw6exC,CoFx6eE,sBAAsC,epF46exC,CoF56eE,uBAAsC,epFg7exC,CoFh7eE,qBAAsC,epFo7exC,CoFp7eE,oBAAsC,epFw7exC,CoFx7eE,+BAAsC,epF47exC,CoF57eE,+BAAsC,epFg8exC,CoFh8eE,gDAAsC,epFo8exC,CoFp8eE,oDAAsC,epF48exC,CoF58eE,kBAAsC,epFg9exC,CoFh9eE,kDAAsC,epFw9exC,CoFx9eE,mBAAsC,epF49exC,CoF59eE,0BAAsC,epFg+exC,CoFh+eE,uBAAsC,epFo+exC,CoFp+eE,qBAAsC,epFw+exC,CoFx+eE,iDAAsC,epFg/exC,CoFh/eE,0BAAsC,epFo/exC,CoFp/eE,oDAAsC,epF4/exC,CoF5/eE,sDAAsC,epFogfxC,CoFpgfE,4CAAsC,epF4gfxC,CoF5gfE,sBAAsC,epFghfxC,CoFhhfE,kBAAsC,epFohfxC,CoFphfE,2BAAsC,epFwhfxC,CoFxhfE,sBAAsC,epF4hfxC,CoF5hfE,uCAAsC,epFoifxC,CoFpifE,kBAAsC,epFwifxC,CoFxifE,gBAAsC,epF4ifxC,CoF5ifE,uCAAsC,epFojfxC,CoFpjfE,sBAAsC,epFwjfxC,CoFxjfE,sDAAsC,epFgkfxC,CoFhkfE,2BAAsC,epFokfxC,CoFpkfE,2BAAsC,epFwkfxC,CoFxkfE,yBAAsC,epF4kfxC,CoF5kfE,uBAAsC,epFglfxC,CoFhlfE,sBAAsC,epFolfxC,CoFplfE,kBAAsC,epFwlfxC,CoFxlfE,2CAAsC,epFgmfxC,CoFhmfE,uBAAsC,epFomfxC,CoFpmfE,eAAsC,epFwmfxC,CoFxmfE,qCAAsC,epF4mfxC,CoF5mfE,uBAAsC,epFgnfxC,CoFhnfE,iBAAsC,epFonfxC,CoFpnfE,8BAAsC,epFwnfxC,CoFxnfE,oBAAsC,epF4nfxC,CoF5nfE,2BAAsC,epFgofxC,CoFhofE,sBAAsC,epFoofxC,CoFpofE,6BAAsC,epFwofxC,CoFxofE,gBAAsC,epF4ofxC,CoF5ofE,sBAAsC,epFgpfxC,CoFhpfE,gDAAsC,epFwpfxC,CoFxpfE,+CAAsC,epFgqfxC,CoFhqfE,6CAAsC,epFwqfxC,CoFxqfE,wBAAsC,epF4qfxC,CoF5qfE,8CAAsC,epForfxC,CoFprfE,uBAAsC,epFwrfxC,CoFxrfE,iDAAsC,epFgsfxC,CoFhsfE,8CAAsC,epFwsfxC,CoFxsfE,oBAAsC,epF4sfxC,CoF5sfE,yBAAsC,epFgtfxC,CoFhtfE,8BAAsC,epFotfxC,CoFptfE,sDAAsC,epF4tfxC,CoF5tfE,gBAAsC,epFgufxC,CoFhufE,yCAAsC,epFwufxC,CoFxufE,eAAsC,epF4ufxC,CoF5ufE,2CAAsC,epFovfxC,CoFpvfE,6BAAsC,epFwvfxC,CoFxvfE,qCAAsC,epF4vfxC,CoF5vfE,uBAAsC,epFgwfxC,CoFhwfE,sBAAsC,epFowfxC,CoFpwfE,eAAsC,epFwwfxC,CoFxwfE,6BAAsC,epF4wfxC,CoF5wfE,qBAAsC,epFgxfxC,CoFhxfE,gEAAsC,epF4xfxC,CoF5xfE,eAAsC,epFgyfxC,CoFhyfE,8BAAsC,epFoyfxC,CoFpyfE,4CAAsC,epF4yfxC,CoF5yfE,2BAAsC,epFgzfxC,CoFhzfE,uCAAsC,epFwzfxC,CoFxzfE,wBAAsC,epF4zfxC,CoF5zfE,qCAAsC,epFo0fxC,CoFp0fE,uCAAsC,epF40fxC,CoF50fE,kBAAsC,epFg1fxC,CoFh1fE,0DAAsC,epFw1fxC,CoFx1fE,uCAAsC,epFg2fxC,CoFh2fE,8CAAsC,epFw2fxC,CoFx2fE,sBAAsC,epF42fxC,CoF52fE,mBAAsC,epFg3fxC,CoFh3fE,mDAAsC,epFw3fxC,CoFx3fE,2DAAsC,epFg4fxC,CoFh4fE,qBAAsC,epFo4fxC,CoFp4fE,wBAAsC,epFw4fxC,CoFx4fE,yBAAsC,epF44fxC,CoF54fE,yBAAsC,epFg5fxC,CoFh5fE,kDAAsC,epFw5fxC,CoFx5fE,4GAAsC,epFw6fxC,CoFx6fE,qBAAsC,epF46fxC,CoF56fE,mDAAsC,epFo7fxC,CoFp7fE,uBAAsC,epFw7fxC,CoFx7fE,uBAAsC,epF47fxC,CoF57fE,+BAAsC,epFg8fxC,CoFh8fE,uBAAsC,epFo8fxC,CoFp8fE,iDAAsC,epF48fxC,CoF58fE,iBAAsC,epFg9fxC,CoFh9fE,oDAAsC,epFw9fxC,CoFx9fE,0BAAsC,epF49fxC,CoF59fE,2BAAsC,epFg+fxC,CoFh+fE,yCAAsC,epFw+fxC,CoFx+fE,mDAAsC,epFg/fxC,CoFh/fE,uBAAsC,epFo/fxC,CoFp/fE,wBAAsC,epFw/fxC,CoFx/fE,oBAAsC,epF4/fxC,CoF5/fE,wBAAsC,epFgggBxC,CoFhggBE,wBAAsC,epFoggBxC,CoFpggBE,wBAAsC,epFwggBxC,CoFxggBE,sBAAsC,epF4ggBxC,CoF5ggBE,sBAAsC,epFghgBxC,CoFhhgBE,qBAAsC,epFohgBxC,CoFphgBE,6CAAsC,epF4hgBxC,CoF5hgBE,iBAAsC,epFgigBxC,CoFhigBE,kFAAsC,epF4igBxC,CoF5igBE,wBAAsC,epFgjgBxC,CoFhjgBE,eAAsC,epFojgBxC,CoFpjgBE,kDAAsC,epF4jgBxC,CoF5jgBE,sDAAsC,epFwkgBxC,CoFxkgBE,iBAAsC,epF4kgBxC,CoF5kgBE,kBAAsC,epFglgBxC,CoFhlgBE,uCAAsC,epFwlgBxC,CoFxlgBE,sBAAsC,epF4lgBxC,CoF5lgBE,yBAAsC,epFgmgBxC,CoFhmgBE,0BAAsC,epFomgBxC,CoFpmgBE,sBAAsC,epFwmgBxC,CoFxmgBE,sBAAsC,epF4mgBxC,CoF5mgBE,+BAAsC,epFgngBxC,CoFhngBE,iBAAsC,epFongBxC,CoFpngBE,sBAAsC,epFwngBxC,CoFxngBE,mBAAsC,epF4ngBxC,CoF5ngBE,oBAAsC,epFgogBxC,CoFhogBE,aAAsC,WpFoogBxC,CoFpogBE,4BAAsC,epFwogBxC,CoFxogBE,sBAAsC,epF4ogBxC,CoF5ogBE,6DAAsC,epFopgBxC,CoFppgBE,qCAAsC,epF4pgBxC,CoF5pgBE,oBAAsC,epFgqgBxC,CoFhqgBE,uCAAsC,epFwqgBxC,CoFxqgBE,aAAsC,WpF4qgBxC,CoF5qgBE,8CAAsC,epForgBxC,CoFprgBE,uBAAsC,epFwrgBxC,CoFxrgBE,iBAAsC,epF4rgBxC,CoF5rgBE,0CAAsC,epFosgBxC,CoFpsgBE,0BAAsC,epFwsgBxC,CoFxsgBE,oDAAsC,epFgtgBxC,CoFhtgBE,iDAAsC,epFwtgBxC,CoFxtgBE,yCAAsC,epFgugBxC,CoFhugBE,wDAAsC,epFwugBxC,CoFxugBE,2BAAsC,epF4ugBxC,CoF5ugBE,0BAAsC,epFgvgBxC,CoFhvgBE,iBAAsC,epFovgBxC,CoFpvgBE,qBAAsC,epFwvgBxC,CoFxvgBE,qBAAsC,epF4vgBxC,CoF5vgBE,sBAAsC,epFgwgBxC,CoFhwgBE,eAAsC,epFowgBxC,CoFpwgBE,mBAAsC,epFwwgBxC,CoFxwgBE,iEAAsC,epFoxgBxC,CoFpxgBE,oBAAsC,epFwxgBxC,CoFxxgBE,gDAAsC,epFgygBxC,CoFhygBE,qBAAsC,epFoygBxC,CoFpygBE,+BAAsC,epFwygBxC,CoFxygBE,kBAAsC,epF4ygBxC,CoF5ygBE,iBAAsC,epFgzgBxC,CoFhzgBE,uDAAsC,epFwzgBxC,CoFxzgBE,yBAAsC,epF4zgBxC,CoF5zgBE,uBAAsC,epFg0gBxC,CoFh0gBE,wBAAsC,epFo0gBxC,CoFp0gBE,yBAAsC,epFw0gBxC,CoFx0gBE,kBAAsC,epF40gBxC,CoF50gBE,0BAAsC,epFg1gBxC,CoFh1gBE,gDAAsC,epFw1gBxC,CoFx1gBE,oBAAsC,epF41gBxC,CoF51gBE,0CAAsC,epFo2gBxC,CoFp2gBE,8CAAsC,epF42gBxC,CoF52gBE,0BAAsC,epFg3gBxC,CoFh3gBE,wCAAsC,epFw3gBxC,CoFx3gBE,wBAAsC,epF43gBxC,CoF53gBE,kBAAsC,epFg4gBxC,CoFh4gBE,kBAAsC,epFo4gBxC,CoFp4gBE,kBAAsC,epFw4gBxC,CoFx4gBE,mFAAsC,epFo5gBxC,CoFp5gBE,8DAAsC,epF45gBxC,CoF55gBE,iBAAsC,epFg6gBxC,CoFh6gBE,0BAAsC,epFo6gBxC,CoFp6gBE,mBAAsC,epFw6gBxC,CoFx6gBE,0EAAsC,epFg7gBxC,CoFh7gBE,oBAAsC,epFo7gBxC,CoFp7gBE,iBAAsC,epFw7gBxC,CoFx7gBE,sBAAsC,epF47gBxC,CoF57gBE,uBAAsC,epFg8gBxC,CoFh8gBE,gBAAsC,epFo8gBxC,CoFp8gBE,wBAAsC,epFw8gBxC,CoFx8gBE,wBAAsC,epF48gBxC,CoF58gBE,+EAAsC,epFw9gBxC,CoFx9gBE,4BAAsC,epF49gBxC,CoF59gBE,kBAAsC,epFg+gBxC,CoFh+gBE,wIAAsC,epFo/gBxC,CoFp/gBE,qCAAsC,epF4/gBxC,CoF5/gBE,+DAAsC,epFoghBxC,CoFpghBE,oBAAsC,epFwghBxC,CoFxghBE,8CAAsC,epFghhBxC,CoFhhhBE,wBAAsC,epFohhBxC,CoFphhBE,sCAAsC,epFwhhBxC,CoFxhhBE,yDAAsC,epFgihBxC,CoFhihBE,yBAAsC,epFoihBxC,CoFpihBE,yBAAsC,epFwihBxC,CoFxihBE,wDAAsC,epFgjhBxC,CoFhjhBE,0CAAsC,epFwjhBxC,CoFxjhBE,uBAAsC,epF4jhBxC,CoF5jhBE,oEAAsC,epFwkhBxC,CoFxkhBE,2CAAsC,epFglhBxC,CoFhlhBE,kDAAsC,epFwlhBxC,CoFxlhBE,oDAAsC,epFgmhBxC,CoFhmhBE,eAAsC,epFomhBxC,CoFpmhBE,uBAAsC,epFwmhBxC,CoFxmhBE,qCAAsC,epFgnhBxC,CoFhnhBE,iBAAsC,epFonhBxC,CoFpnhBE,sDAAsC,epF4nhBxC,CoF5nhBE,6BAAsC,epFgohBxC,CoFhohBE,uBAAsC,epFoohBxC,CoFpohBE,sBAAsC,epFwohBxC,CoFxohBE,sBAAsC,epF4ohBxC,CoF5ohBE,kKAAsC,epF4phBxC,CoF5phBE,+BAAsC,epFoqhBxC,CoFpqhBE,+CAAsC,epF4qhBxC,CoF5qhBE,kBAAsC,epFgrhBxC,CoFhrhBE,oBAAsC,epForhBxC,CoFprhBE,yBAAsC,epFwrhBxC,CoFxrhBE,iCAAsC,epF4rhBxC,CoF5rhBE,kDAAsC,epFoshBxC,CoFpshBE,iBAAsC,epFwshBxC,CoFxshBE,4BAAsC,epF4shBxC,CoF5shBE,4BAAsC,epFgthBxC,CoFhthBE,yBAAsC,epFothBxC,CoFpthBE,6CAAsC,epF4thBxC,CoF5thBE,aAAsC,WpFguhBxC,CoFhuhBE,2DAAsC,epFwuhBxC,CoFxuhBE,uCAAsC,epFgvhBxC,CoFhvhBE,kDAAsC,epFwvhBxC,CoFxvhBE,kBAAsC,epF4vhBxC,CoF5vhBE,kBAAsC,epFgwhBxC,CoFhwhBE,6BAAsC,epFowhBxC,CoFpwhBE,aAAsC,WpFwwhBxC,CoFxwhBE,oBAAsC,epF4whBxC,CoF5whBE,oBAAsC,epFgxhBxC,CoFhxhBE,sBAAsC,epFoxhBxC,CoFpxhBE,2DAAsC,epF4xhBxC,CoF5xhBE,8HAAsC,epF4yhBxC,CoF5yhBE,uDAAsC,epFozhBxC,CoFpzhBE,oBAAsC,epFwzhBxC,CoFxzhBE,sBAAsC,epF4zhBxC,CoF5zhBE,6CAAsC,epFo0hBxC,CoFp0hBE,yBAAsC,epFw0hBxC,CoFx0hBE,iBAAsC,epF40hBxC,CoF50hBE,kBAAsC,epFg1hBxC,CoFh1hBE,wCAAsC,epFw1hBxC,CoFx1hBE,uBAAsC,epF41hBxC,CoF51hBE,yBAAsC,epFg2hBxC,CoFh2hBE,mBAAsC,epFo2hBxC,CoFp2hBE,iBAAsC,epFw2hBxC,CoFx2hBE,qBAAsC,epF42hBxC,CoF52hBE,iBAAsC,epFg3hBxC,CoFh3hBE,2BAAsC,epFo3hBxC,CoFp3hBE,yBAAsC,epFw3hBxC,CoFx3hBE,mDAAsC,epFg4hBxC,CoFh4hBE,kBAAsC,epFo4hBxC,CoFp4hBE,qBAAsC,epFw4hBxC,CoFx4hBE,sDAAsC,epFg5hBxC,CoFh5hBE,oBAAsC,epFo5hBxC,CoFp5hBE,uBAAsC,epFw5hBxC,CoFx5hBE,mCAAsC,epFg6hBxC,CoFh6hBE,wBAAsC,epFo6hBxC,CoFp6hBE,wBAAsC,epFw6hBxC,CoFx6hBE,4CAAsC,epF46hBxC,CoF56hBE,6BAAsC,epFg7hBxC,CoFh7hBE,2CAAsC,epFw7hBxC,CoFx7hBE,wBAAsC,epF47hBxC,CoF57hBE,kBAAsC,epFg8hBxC,CoFh8hBE,sBAAsC,epFo8hBxC,CoFp8hBE,0BAAsC,epFw8hBxC,CoFx8hBE,aAAsC,WpF48hBxC,CoF58hBE,qCAAsC,epFo9hBxC,CoFp9hBE,sBAAsC,epFw9hBxC,CoFx9hBE,iCAAsC,epF49hBxC,CoF59hBE,gBAAsC,epFg+hBxC,CoFh+hBE,+BAAsC,epFo+hBxC,CoFp+hBE,oBAAsC,epFw+hBxC,CoFx+hBE,qCAAsC,epFg/hBxC,CoFh/hBE,4CAAsC,epFw/hBxC,CoFx/hBE,0EAAsC,epFogiBxC,CoFpgiBE,6BAAsC,epFwgiBxC,CoFxgiBE,mBAAsC,epF4giBxC,CoF5giBE,oEAAsC,epFwhiBxC,CoFxhiBE,mCAAsC,epFgiiBxC,CoFhiiBE,wBAAsC,epFoiiBxC,CoFpiiBE,2CAAsC,epF4iiBxC,CoF5iiBE,8CAAsC,epFojiBxC,CoFpjiBE,qCAAsC,epF4jiBxC,CoF5jiBE,oCAAsC,epFgkiBxC,CoFhkiBE,4EAAsC,epFgliBxC,CoFhliBE,yBAAsC,epFoliBxC,CoFpliBE,0BAAsC,epFwliBxC,CoFxliBE,aAAsC,WpF4liBxC,CoF5liBE,wBAAsC,epFgmiBxC,CoFhmiBE,oBAAsC,epFomiBxC,CoFpmiBE,qBAAsC,epFwmiBxC,CoFxmiBE,sDAAsC,epFgniBxC,CoFhniBE,sEAAsC,epF4niBxC,CoF5niBE,uCAAsC,epFooiBxC,CoFpoiBE,yDAAsC,epF4oiBxC,CoF5oiBE,qBAAsC,epFgpiBxC,CoFhpiBE,qBAAsC,epFopiBxC,CoFppiBE,iBAAsC,epFwpiBxC,CoFxpiBE,sDAAsC,epFgqiBxC,CoFhqiBE,wBAAsC,epFoqiBxC,CoFpqiBE,gDAAsC,epF4qiBxC,CoF5qiBE,gBAAsC,epFgriBxC,CoFhriBE,sBAAsC,epForiBxC,CoFpriBE,kBAAsC,epFwriBxC,CoFxriBE,qBAAsC,epF4riBxC,CoF5riBE,iBAAsC,epFgsiBxC,CoFhsiBE,2BAAsC,epFosiBxC,CoFpsiBE,wBAAsC,epFwsiBxC,CoFxsiBE,oDAAsC,epFgtiBxC,CoFhtiBE,mBAAsC,epFotiBxC,CoFptiBE,sBAAsC,epFwtiBxC,CoFxtiBE,+BAAsC,epFguiBxC,CoFhuiBE,uBAAsC,epFouiBxC,CoFpuiBE,oBAAsC,epFwuiBxC,CoFxuiBE,iBAAsC,epF4uiBxC,CoF5uiBE,gBAAsC,epFgviBxC,CoFhviBE,kBAAsC,epFoviBxC,CoFpviBE,8BAAsC,epFwviBxC,CoFxviBE,gFAAsC,epF4wiBxC,CoF5wiBE,wEAAsC,epF4xiBxC,CoF5xiBE,eAAsC,epFgyiBxC,CoFhyiBE,kBAAsC,epFoyiBxC,CoFpyiBE,iDAAsC,epF4yiBxC,CoF5yiBE,sBAAsC,epFgziBxC,CoFhziBE,qBAAsC,epFoziBxC,CoFpziBE,oBAAsC,epFwziBxC,CoFxziBE,wDAAsC,epFg0iBxC,CoFh0iBE,+BAAsC,epFo0iBxC,CoFp0iBE,uBAAsC,epFw0iBxC,CoFx0iBE,6FAAsC,epFo1iBxC,CoFp1iBE,qBAAsC,YpFw1iBxC,CoFx1iBE,sBAAsC,epF41iBxC,CoF51iBE,sBAAsC,epFg2iBxC,CoFh2iBE,2BAAsC,epFo2iBxC,CoFp2iBE,sBAAsC,epFw2iBxC,CoFx2iBE,uBAAsC,epF42iBxC,CoF52iBE,qBAAsC,epFg3iBxC,CoFh3iBE,wDAAsC,epFw3iBxC,CoFx3iBE,+BAAsC,epF43iBxC,CoF53iBE,0CAAsC,epFo4iBxC,CoFp4iBE,sBAAsC,epFw4iBxC,CoFx4iBE,4CAAsC,epFg5iBxC,CoFh5iBE,iCAAsC,epFo5iBxC,CoFp5iBE,mBAAsC,epFw5iBxC,CoFx5iBE,gCAAsC,epF45iBxC,CoF55iBE,eAAsC,epFg6iBxC,CoFh6iBE,kDAAsC,epFw6iBxC,CoFx6iBE,qCAAsC,epFg7iBxC,CoFh7iBE,6BAAsC,epFo7iBxC,CoFp7iBE,mDAAsC,epF47iBxC,CoF57iBE,wBAAsC,epFg8iBxC,CoFh8iBE,qCAAsC,epFo8iBxC,CoFp8iBE,oBAAsC,epFw8iBxC,CoFx8iBE,yBAAsC,epF48iBxC,CoF58iBE,6BAAsC,epFg9iBxC,CoFh9iBE,0DAAsC,epFw9iBxC,CoFx9iBE,iBAAsC,epF49iBxC,CoF59iBE,eAAsC,epFg+iBxC,CoFh+iBE,wCAAsC,epFw+iBxC,CoFx+iBE,mBAAsC,epF4+iBxC,CoF5+iBE,0GAAsC,epF4/iBxC,CoF5/iBE,gBAAsC,epFggjBxC,CoFhgjBE,uBAAsC,epFogjBxC,CoFpgjBE,6BAAsC,epFwgjBxC,CoFxgjBE,wBAAsC,epF4gjBxC,CoF5gjBE,uBAAsC,epFghjBxC,CoFhhjBE,wBAAsC,epFohjBxC,CoFphjBE,oDAAsC,epF4hjBxC,CoF5hjBE,kDAAsC,epFoijBxC,CoFpijBE,gBAAsC,epFwijBxC,CoFxijBE,wBAAsC,YpF4ijBxC,CoF5ijBE,8CAAsC,epFojjBxC,CoFpjjBE,sBAAsC,epFwjjBxC,CoFxjjBE,mCAAsC,epFgkjBxC,CoFhkjBE,kBAAsC,epFokjBxC,CoFpkjBE,8FAAsC,epFoljBxC,CoFpljBE,wBAAsC,epFwljBxC,CoFxljBE,gBAAsC,epF4ljBxC,CoF5ljBE,8CAAsC,epFomjBxC,CoFpmjBE,iBAAsC,epFwmjBxC,CoFxmjBE,iBAAsC,epF4mjBxC,CoF5mjBE,mBAAsC,epFgnjBxC,CoFhnjBE,+EAAsC,epF4njBxC,CoF5njBE,8BAAsC,epFgojBxC,CoFhojBE,qEAAsC,epF4ojBxC,CoF5ojBE,uBAAsC,epFgpjBxC,CoFhpjBE,sBAAsC,epFopjBxC,CoFppjBE,+DAAsC,epFgqjBxC,CoFhqjBE,wBAAsC,epFoqjBxC,CoFpqjBE,kBAAsC,epFwqjBxC,CoFxqjBE,qDAAsC,epFgrjBxC,CoFhrjBE,gBAAsC,epForjBxC,CoFprjBE,qBAAsC,epFwrjBxC,CoFxrjBE,6BAAsC,epF4rjBxC,CoF5rjBE,eAAsC,epFgsjBxC,CoFhsjBE,qBAAsC,epFosjBxC,CoFpsjBE,6CAAsC,epF4sjBxC,CoF5sjBE,qBAAsC,epFgtjBxC,CoFhtjBE,+DAAsC,epF4tjBxC,CoF5tjBE,iCAAsC,epFoujBxC,CoFpujBE,6DAAsC,epF4ujBxC,CoF5ujBE,qBAAsC,epFgvjBxC,CoFhvjBE,gBAAsC,epFovjBxC,CoFpvjBE,gBAAsC,epFwvjBxC,CoFxvjBE,gCAAsC,epF4vjBxC,CoF5vjBE,uBAAsC,epFgwjBxC,CoFhwjBE,8CAAsC,epFwwjBxC,CoFxwjBE,6FAAsC,epFoxjBxC,CoFpxjBE,sDAAsC,epF4xjBxC,CoF5xjBE,2DAAsC,epFoyjBxC,CoFpyjBE,sBAAsC,epFwyjBxC,CoFxyjBE,2BAAsC,epF4yjBxC,CoF5yjBE,yBAAsC,epFgzjBxC,CoFhzjBE,yCAAsC,epFwzjBxC,CoFxzjBE,mBAAsC,epF4zjBxC,CoF5zjBE,qEAAsC,epFw0jBxC,CoFx0jBE,4BAAsC,epF40jBxC,CoF50jBE,qCAAsC,epFg1jBxC,CoFh1jBE,wBAAsC,epFo1jBxC,CoFp1jBE,gEAAsC,epFg2jBxC,CoFh2jBE,4BAAsC,epFo2jBxC,CoFp2jBE,wBAAsC,epFw2jBxC,CoFx2jBE,wCAAsC,epFg3jBxC,CoFh3jBE,uBAAsC,epFo3jBxC,CoFp3jBE,sBAAsC,epFw3jBxC,CoFx3jBE,oDAAsC,epFg4jBxC,CoFh4jBE,wBAAsC,epFo4jBxC,CoFp4jBE,sBAAsC,epFw4jBxC,CoFx4jBE,4BAAsC,epF44jBxC,CoF54jBE,+BAAsC,epFg5jBxC,CoFh5jBE,iDAAsC,epFw5jBxC,CoFx5jBE,oBAAsC,epF45jBxC,CoF55jBE,sDAAsC,epFw6jBxC,CoFx6jBE,kBAAsC,epF46jBxC,CoF56jBE,uCAAsC,epFo7jBxC,CoFp7jBE,yBAAsC,epFw7jBxC,CoFx7jBE,8CAAsC,epFg8jBxC,CoFh8jBE,uBAAsC,epFo8jBxC,CoFp8jBE,gBAAsC,epFw8jBxC,CoFx8jBE,0CAAsC,epFg9jBxC,CoFh9jBE,aAAsC,WpFo9jBxC,CoFp9jBE,uDAAsC,epF49jBxC,CoF59jBE,+CAAsC,epFo+jBxC,CoFp+jBE,gBAAsC,epFw+jBxC,CoFx+jBE,yBAAsC,epF4+jBxC,CoF5+jBE,gDAAsC,epFo/jBxC,CoFp/jBE,wBAAsC,epFw/jBxC,CoFx/jBE,qDAAsC,epFggkBxC,CoFhgkBE,6CAAsC,epFwgkBxC,CoFxgkBE,0BAAsC,epF4gkBxC,CoF5gkBE,sDAAsC,epFohkBxC,CoFphkBE,gBAAsC,epFwhkBxC,CoFxhkBE,uEAAsC,epFoikBxC,CoFpikBE,yBAAsC,epFwikBxC,CoFxikBE,2CAAsC,epFgjkBxC,CoFhjkBE,qDAAsC,epFwjkBxC,CoFxjkBE,kDAAsC,epFgkkBxC,CoFhkkBE,eAAsC,epFokkBxC,CoFpkkBE,gDAAsC,epF4kkBxC,CoF5kkBE,+BAAsC,YpFolkBxC,CoFplkBE,kBAAsC,epFwlkBxC,CoFxlkBE,oBAAsC,epF4lkBxC,CoF5lkBE,yFAAsC,epFgnkBxC,CoFhnkBE,uDAAsC,epFwnkBxC,CoFxnkBE,yDAAsC,epFgokBxC,CoFhokBE,qBAAsC,epFookBxC,CoFpokBE,2BAAsC,epFwokBxC,CoFxokBE,gBAAsC,epF4okBxC,CoF5okBE,sBAAsC,epFgpkBxC,CoFhpkBE,gDAAsC,epFwpkBxC,CoFxpkBE,mBAAsC,epF4pkBxC,CoF5pkBE,mDAAsC,epFoqkBxC,CoFpqkBE,8BAAsC,epFwqkBxC,CoFxqkBE,yBAAsC,epF4qkBxC,CoF5qkBE,0BAAsC,epFgrkBxC,CoFhrkBE,qBAAsC,epForkBxC,CoFprkBE,kBAAsC,YpFwrkBxC,CoFxrkBE,mBAAsC,epF4rkBxC,CoF5rkBE,iBAAsC,epFgskBxC,CoFhskBE,iGAAsC,epFotkBxC,CoFptkBE,eAAsC,epFwtkBxC,CoFxtkBE,kBAAsC,epF4tkBxC,CoF5tkBE,6CAAsC,epFoukBxC,CoFpukBE,wBAAsC,epFwukBxC,CoFxukBE,iBAAsC,epF4ukBxC,CoF5ukBE,0BAAsC,epFgvkBxC,CoFhvkBE,6BAAsC,epFovkBxC,CoFpvkBE,wCAAsC,epF4vkBxC,CoF5vkBE,wBAAsC,epFgwkBxC,CoFhwkBE,sBAAsC,epFowkBxC,CoFpwkBE,4CAAsC,epF4wkBxC,CoF5wkBE,uBAAsC,epFgxkBxC,CoFhxkBE,gBAAsC,epFoxkBxC,CoFpxkBE,oBAAsC,epFwxkBxC,CoFxxkBE,0BAAsC,epF4xkBxC,CoF5xkBE,uBAAsC,epFgykBxC,CoFhykBE,wBAAsC,epFoykBxC,CoFpykBE,oBAAsC,epFwykBxC,CoFxykBE,uBAAsC,epF4ykBxC,CoF5ykBE,kBAAsC,epFgzkBxC,CoFhzkBE,mBAAsC,epFozkBxC,CoFpzkBE,6BAAsC,epFwzkBxC,CoFxzkBE,sBAAsC,epF4zkBxC,CoF5zkBE,yBAAsC,epFg0kBxC,CoFh0kBE,mBAAsC,epFo0kBxC,CoFp0kBE,uCAAsC,epF40kBxC,CoF50kBE,qBAAsC,epFg1kBxC,CoFh1kBE,uBAAsC,epFo1kBxC,CoFp1kBE,gDAAsC,epF41kBxC,CoF51kBE,iBAAsC,epFg2kBxC,CoFh2kBE,kDAAsC,epFw2kBxC,CoFx2kBE,yBAAsC,epF42kBxC,CoF52kBE,uBAAsC,epFg3kBxC,CoFh3kBE,wBAAsC,epFo3kBxC,CoFp3kBE,8BAAsC,epFw3kBxC,CoFx3kBE,yCAAsC,YpFg4kBxC,CoFh4kBE,wBAAsC,epFo4kBxC,CoFp4kBE,+BAAsC,epFw4kBxC,CoFx4kBE,mBAAsC,epF44kBxC,CoF54kBE,uCAAsC,epFo5kBxC,CoFp5kBE,2CAAsC,epF45kBxC,CoF55kBE,kBAAsC,epFg6kBxC,CoFh6kBE,0CAAsC,epFw6kBxC,CoFx6kBE,kBAAsC,epF46kBxC,CoF56kBE,sBAAsC,epFg7kBxC,CoFh7kBE,sCAAsC,epFw7kBxC,CoFx7kBE,mBAAsC,epF47kBxC,CoF57kBE,iBAAsC,epFg8kBxC,CoFh8kBE,iBAAsC,epFo8kBxC,CoFp8kBE,iCAAsC,epF48kBxC,CoF58kBE,qBAAsC,epFg9kBxC,CoFh9kBE,+BAAsC,epFo9kBxC,CoFp9kBE,mBAAsC,epFw9kBxC,CoFx9kBE,mDAAsC,epFg+kBxC,CoFh+kBE,qBAAsC,epFo+kBxC,CoFp+kBE,oBAAsC,epFw+kBxC,CoFx+kBE,kDAAsC,epFg/kBxC,CoFh/kBE,mBAAsC,epFo/kBxC,CoFp/kBE,iDAAsC,epF4/kBxC,CoF5/kBE,gCAAsC,epFgglBxC,CoFhglBE,iBAAsC,epFoglBxC,CoFpglBE,+CAAsC,epF4glBxC,CoF5glBE,oBAAsC,epFghlBxC,CoFhhlBE,oDAAsC,epFwhlBxC,CoFxhlBE,kBAAsC,epF4hlBxC,CoF5hlBE,gDAAsC,epFoilBxC,CoFpilBE,2DAAsC,epF4ilBxC,CoF5ilBE,wDAAsC,epFojlBxC,CoFpjlBE,0CAAsC,epF4jlBxC,CoF5jlBE,6DAAsC,epFoklBxC,CoFpklBE,yBAAsC,epFwklBxC,CoFxklBE,8CAAsC,epFgllBxC,CoFhllBE,8DAAsC,epFwllBxC,CoFxllBE,gCAAsC,epF4llBxC,CoF5llBE,mBAAsC,epFgmlBxC,CoFhmlBE,gCAAsC,epFomlBxC,CoFpmlBE,iBAAsC,epFwmlBxC,CoFxmlBE,uCAAsC,epFgnlBxC,CoFhnlBE,eAAsC,epFonlBxC,CoFpnlBE,kBAAsC,epFwnlBxC,CoFxnlBE,gBAAsC,epF4nlBxC,CoF5nlBE,sDAAsC,epFoolBxC,CoFpolBE,kBAAsC,epFwolBxC,CoFxolBE,oBAAsC,epF4olBxC,CoF5olBE,iBAAsC,epFgplBxC,CoFhplBE,uBAAsC,epFoplBxC,CoFpplBE,2BAAsC,epFwplBxC,CoFxplBE,2CAAsC,epFgqlBxC,CoFhqlBE,iBAAsC,epFoqlBxC,CoFpqlBE,wBAAsC,epFwqlBxC,CoFxqlBE,mBAAsC,epF4qlBxC,CoF5qlBE,kDAAsC,epForlBxC,CoFprlBE,wEAAsC,epFgslBxC,CoFhslBE,mBAAsC,YpFoslBxC,CoFpslBE,oEAAsC,epF4slBxC,CoF5slBE,mBAAsC,epFgtlBxC,CoFhtlBE,aAAsC,WpFotlBxC,CoFptlBE,iBAAsC,epFwtlBxC,CoFxtlBE,wBAAsC,epF4tlBxC,CoF5tlBE,oBAAsC,epFgulBxC,CoFhulBE,6BAAsC,epFoulBxC,CoFpulBE,qCAAsC,epFwulBxC,CoFxulBE,qBAAsC,epF4ulBxC,CoF5ulBE,eAAsC,epFgvlBxC,CoFhvlBE,kCAAsC,epFovlBxC,CoFpvlBE,2CAAsC,epF4vlBxC,CoF5vlBE,2BAAsC,epFgwlBxC,CoFhwlBE,oBAAsC,epFowlBxC,CoFpwlBE,mBAAsC,epFwwlBxC,CoFxwlBE,mCAAsC,epFgxlBxC,CoFhxlBE,mBAAsC,epFoxlBxC,CoFpxlBE,kBAAsC,epFwxlBxC,CoFxxlBE,uBAAsC,epF4xlBxC,CoF5xlBE,8CAAsC,epFoylBxC,CoFpylBE,6DAAsC,epF4ylBxC,CoF5ylBE,wBAAsC,epFgzlBxC,CoFhzlBE,mCAAsC,epFozlBxC,CoFpzlBE,uFAAsC,epFo0lBxC,CoFp0lBE,iBAAsC,epFw0lBxC,CoFx0lBE,0CAAsC,epF40lBxC,CoF50lBE,qDAAsC,epFo1lBxC,CoFp1lBE,iDAAsC,epF41lBxC,CoF51lBE,mBAAsC,epFg2lBxC,CoFh2lBE,4BAAsC,epFo2lBxC,CoFp2lBE,uCAAsC,epF42lBxC,CoF52lBE,kBAAsC,epFg3lBxC,CoFh3lBE,sBAAsC,epFo3lBxC,CoFp3lBE,uCAAsC,epF43lBxC,CoF53lBE,uBAAsC,epFg4lBxC,CoFh4lBE,4BAAsC,epFo4lBxC,CoFp4lBE,+BAAsC,epF44lBxC,CoF54lBE,wBAAsC,epFg5lBxC,CoFh5lBE,mDAAsC,epFw5lBxC,CoFx5lBE,8EAAsC,epFo6lBxC,CoFp6lBE,kBAAsC,epFw6lBxC,CoFx6lBE,0CAAsC,epFg7lBxC,CoFh7lBE,aAAsC,WpFo7lBxC,CoFp7lBE,yCAAsC,epF47lBxC,CoF57lBE,sCAAsC,epFo8lBxC,CoFp8lBE,gBAAsC,epFw8lBxC,CoFx8lBE,qBAAsC,epF48lBxC,CoF58lBE,iBAAsC,epFg9lBxC,CoFh9lBE,uDAAsC,epFw9lBxC,CoFx9lBE,8BAAsC,epF49lBxC,CoF59lBE,sBAAsC,epFg+lBxC,CoFh+lBE,6BAAsC,epFo+lBxC,CoFp+lBE,6BAAsC,epFw+lBxC,CoFx+lBE,oCAAsC,epF4+lBxC,CoF5+lBE,4CAAsC,epFo/lBxC,CoFp/lBE,sBAAsC,epFw/lBxC,CoFx/lBE,qBAAsC,epF4/lBxC,CoF5/lBE,0BAAsC,epFggmBxC,CoFhgmBE,8CAAsC,epFwgmBxC,CoFxgmBE,oBAAsC,epF4gmBxC,CoF5gmBE,eAAsC,epFghmBxC,CoFhhmBE,gDAAsC,epFwhmBxC,CoFxhmBE,yDAAsC,epFgimBxC,CoFhimBE,yGAAsC,epFgjmBxC,CoFhjmBE,qBAAsC,epFojmBxC,CoFpjmBE,qBAAsC,epFwjmBxC,CoFxjmBE,yDAAsC,epFgkmBxC,CoFhkmBE,qBAAsC,epFokmBxC,CoFpkmBE,mFAAsC,epFglmBxC,CoFhlmBE,oBAAsC,epFolmBxC,CoFplmBE,yCAAsC,epF4lmBxC,CoF5lmBE,0BAAsC,epFgmmBxC,CoFhmmBE,qBAAsC,epFommBxC,CoFpmmBE,0BAAsC,epFwmmBxC,CoFxmmBE,8CAAsC,epFgnmBxC,CoFhnmBE,uBAAsC,epFonmBxC,CoFpnmBE,mCAAsC,epFwnmBxC,CoFxnmBE,mBAAsC,epF4nmBxC,CoF5nmBE,uBAAsC,epFgomBxC,CoFhomBE,4DAAsC,epFwomBxC,CoFxomBE,qBAAsC,epF4omBxC,CoF5omBE,6DAAsC,epFwpmBxC,CoFxpmBE,wBAAsC,epF4pmBxC,CoF5pmBE,yEAAsC,epFwqmBxC,CoFxqmBE,8CAAsC,epFgrmBxC,CoFhrmBE,2CAAsC,epFwrmBxC,CoFxrmBE,qDAAsC,epFgsmBxC,CoFhsmBE,+CAAsC,epFwsmBxC,CoFxsmBE,sCAAsC,epF4smBxC,CoF5smBE,sDAAsC,epFotmBxC,CoFptmBE,gBAAsC,epFwtmBxC,CoFxtmBE,wBAAsC,epF4tmBxC,CoF5tmBE,iBAAsC,epFgumBxC,CoFhumBE,uCAAsC,epFwumBxC,CoFxumBE,0BAAsC,epF4umBxC,CoF5umBE,wEAAsC,epFwvmBxC,CoFxvmBE,iBAAsC,epF4vmBxC,CoF5vmBE,iBAAsC,epFgwmBxC,CoFhwmBE,4CAAsC,epFwwmBxC,CoFxwmBE,+CAAsC,epFgxmBxC,CoFhxmBE,wDAAsC,epFwxmBxC,CoFxxmBE,qBAAsC,epF4xmBxC,CoF5xmBE,sBAAsC,epFgymBxC,CoFhymBE,0CAAsC,epFwymBxC,CoFxymBE,wBAAsC,epF4ymBxC,CoF5ymBE,2BAAsC,epFgzmBxC,CoFhzmBE,wCAAsC,epFwzmBxC,CoFxzmBE,iBAAsC,epF4zmBxC,CoF5zmBE,gBAAsC,epFg0mBxC,CoFh0mBE,0DAAsC,epFw0mBxC,CoFx0mBE,0BAAsC,epF40mBxC,CoF50mBE,0CAAsC,epFo1mBxC,CoFp1mBE,sBAAsC,epFw1mBxC,CoFx1mBE,sBAAsC,epF41mBxC,CoF51mBE,mBAAsC,epFg2mBxC,CoFh2mBE,qBAAsC,epFo2mBxC,CoFp2mBE,wBAAsC,epFw2mBxC,CoFx2mBE,uBAAsC,epF42mBxC,CoF52mBE,kBAAsC,epFg3mBxC,CoFh3mBE,eAAsC,epFo3mBxC,CoFp3mBE,8CAAsC,epF43mBxC,CoF53mBE,qBAAsC,epFg4mBxC,CoFh4mBE,oCAAsC,epFo4mBxC,CoFp4mBE,gBAAsC,epFw4mBxC,CoFx4mBE,wBAAsC,epF44mBxC,CoF54mBE,6CAAsC,epFo5mBxC,CoFp5mBE,iBAAsC,epFw5mBxC,CoFx5mBE,4BAAsC,epF45mBxC,CoF55mBE,uBAAsC,YpFg6mBxC,CoFh6mBE,uBAAsC,epFo6mBxC,CoFp6mBE,iBAAsC,epFw6mBxC,CoFx6mBE,oEAAsC,epFo7mBxC,CoFp7mBE,wDAAsC,YpFg8mBxC,CoFh8mBE,aAAsC,WpFo8mBxC,CoFp8mBE,4DAAsC,epF48mBxC,CoF58mBE,2CAAsC,epFo9mBxC,CoFp9mBE,oCAAsC,epFw9mBxC,CoFx9mBE,2GAAsC,epF4+mBxC,CoF5+mBE,oBAAsC,epFg/mBxC,CoFh/mBE,kBAAsC,epFo/mBxC,CoFp/mBE,aAAsC,WpFw/mBxC,CoFx/mBE,mBAAsC,epF4/mBxC,CoF5/mBE,kDAAsC,epFognBxC,CoFpgnBE,oBAAsC,epFwgnBxC,CoFxgnBE,2BAAsC,epF4gnBxC,CoF5gnBE,qDAAsC,epFohnBxC,CoFphnBE,8CAAsC,epF4hnBxC,CoF5hnBE,0DAAsC,epFoinBxC,CoFpinBE,mBAAsC,epFwinBxC,CoFxinBE,sBAAsC,epF4inBxC,CoF5inBE,yCAAsC,epFojnBxC,CoFpjnBE,kDAAsC,epF4jnBxC,CoF5jnBE,gCAAsC,epFgknBxC,CoFhknBE,+BAAsC,epFoknBxC,CoFpknBE,2CAAsC,epF4knBxC,C4E7inBE,sFAPA,kBAAsB,CAEtB,cAAe,CANf,UAAW,CAEX,WAAY,CACZ,eAAgB,CAFhB,SAAU,CAHV,iBAAkB,CAOlB,kBAAmB,CANnB,S5EmlnBF;;AqF7mnBA;;;;EAAA,CAQA,YAEE,sDrF6mnBF,CqF1mnBA,WAIE,kBF8BwB,CEjCxB,iCACA,iBAAkB,CAClB,eAAgB,CAEhB,kJrF6mnBF,CqFzmnBA,eAEE,erF2mnBF;;AsFnonBA;;;;EAAA,CAQA,YACE,gDACA,wDtFmonBF,CsFhonBA,WAIE,kBH8BwB,CGjCxB,iCACA,iBAAkB,CAClB,eAAgB,CAEhB,sJtFmonBF,CsF/nnBA,iBAEE,etFionBF;;AuFzpnBA;;;;EAAA,CAQA,YACE,iDACA,yDvFypnBF,CuFtpnBA,WAIE,kBJ8BwB,CIjCxB,mCACA,iBAAkB,CAClB,eAAgB,CAEhB,oJvFypnBF,CuFrpnBA,gBAEE,evFupnBF,CuFnpnBE,kBAAqC,evFupnBvC,CuFvpnBE,iBAAqC,evF2pnBvC,CuF3pnBE,gBAAqC,evF+pnBvC,CuF/pnBE,mBAAqC,evFmqnBvC,CuFnqnBE,kBAAqC,evFuqnBvC,CuFvqnBE,oBAAqC,evF2qnBvC,CuF3qnBE,+BAAqC,evF+qnBvC,CuF/qnBE,eAAqC,evFmrnBvC,CuFnrnBE,kBAAqC,evFurnBvC,CuFvrnBE,iBAAqC,evF2rnBvC,CuF3rnBE,sBAAqC,evF+rnBvC,CuF/rnBE,eAAqC,evFmsnBvC,CuFnsnBE,iBAAqC,evFusnBvC,CuFvsnBE,sBAAqC,evF2snBvC,CuF3snBE,kBAAqC,evF+snBvC,CuF/snBE,gBAAqC,evFmtnBvC,CuFntnBE,qBAAqC,evFutnBvC,CuFvtnBE,sBAAqC,evF2tnBvC,CuF3tnBE,uBAAqC,evF+tnBvC,CuF/tnBE,gBAAqC,evFmunBvC,CuFnunBE,mBAAqC,evFuunBvC,CuFvunBE,eAAqC,evF2unBvC,CuF3unBE,0CAAqC,evFmvnBvC,CuFnvnBE,qBAAqC,evFuvnBvC,CuFvvnBE,cAAqC,evF2vnBvC,CuF3vnBE,iBAAqC,evF+vnBvC,CuF/vnBE,gBAAqC,evFmwnBvC,CuFnwnBE,oBAAqC,evFuwnBvC,CuFvwnBE,mCAAqC,evF2wnBvC,CuF3wnBE,sBAAqC,evF+wnBvC,CuF/wnBE,mBAAqC,evFmxnBvC,CuFnxnBE,kBAAqC,evFuxnBvC,CuFvxnBE,eAAqC,evF2xnBvC,CuF3xnBE,yBAAqC,evF+xnBvC,CuF/xnBE,+BAAqC,evFmynBvC,CuFnynBE,iBAAqC,evFuynBvC,CuFvynBE,iBAAqC,evF2ynBvC,CuF3ynBE,sBAAqC,evF+ynBvC,CuF/ynBE,cAAqC,evFmznBvC,CuFnznBE,mBAAqC,evFuznBvC,CuFvznBE,qBAAqC,evF2znBvC,CuF3znBE,oBAAqC,evF+znBvC,CuF/znBE,kDAAqC,evFu0nBvC,CuFv0nBE,mBAAqC,evF20nBvC,CuF30nBE,kBAAqC,evF+0nBvC,CuF/0nBE,+BAAqC,evFm1nBvC,CuFn1nBE,mBAAqC,evFu1nBvC,CuFv1nBE,iBAAqC,evF21nBvC,CuF31nBE,mBAAqC,evF+1nBvC,CuF/1nBE,wDAAqC,evFu2nBvC,CuFv2nBE,sBAAqC,evF22nBvC,CuF32nBE,wBAAqC,evF+2nBvC,CuF/2nBE,4DAAqC,evFu3nBvC,CuFv3nBE,gBAAqC,evF23nBvC,CuF33nBE,mBAAqC,evF+3nBvC,CuF/3nBE,mBAAqC,evFm4nBvC,CuFn4nBE,sDAAqC,evF24nBvC,CuF34nBE,yBAAqC,evF+4nBvC,CuF/4nBE,sBAAqC,evFm5nBvC,CuFn5nBE,oBAAqC,evFu5nBvC,CuFv5nBE,sBAAqC,evF25nBvC,CuF35nBE,uBAAqC,evF+5nBvC,CuF/5nBE,oBAAqC,evFm6nBvC,CuFn6nBE,sBAAqC,evFu6nBvC,CuFv6nBE,0BAAqC,evF26nBvC,CuF36nBE,sBAAqC,evF+6nBvC,CuF/6nBE,4BAAqC,evFm7nBvC,CuFn7nBE,qBAAqC,evFu7nBvC,CuFv7nBE,mBAAqC,evF27nBvC,CuF37nBE,qBAAqC,evF+7nBvC,CuF/7nBE,+BAAqC,evFm8nBvC,CuFn8nBE,kBAAqC,evFu8nBvC,CuFv8nBE,kBAAqC,evF28nBvC,CuF38nBE,kEAAqC,evFm9nBvC,CuFn9nBE,qBAAqC,evFu9nBvC,CuFv9nBE,uBAAqC,evF29nBvC,CuF39nBE,yBAAqC,evF+9nBvC,CuF/9nBE,kBAAqC,evFm+nBvC,CuFn+nBE,sBAAqC,evFu+nBvC,CuFv+nBE,oBAAqC,evF2+nBvC,CuF3+nBE,uBAAqC,evF++nBvC,CuF/+nBE,qCAAqC,evFm/nBvC,CuFn/nBE,oBAAqC,evFu/nBvC,CuFv/nBE,4BAAqC,evF2/nBvC,CuF3/nBE,+BAAqC,evF+/nBvC,CuF//nBE,qBAAqC,evFmgoBvC,CuFngoBE,kBAAqC,evFugoBvC,CuFvgoBE,wBAAqC,evF2goBvC,CuF3goBE,mBAAqC,evF+goBvC,CuF/goBE,mBAAqC,evFmhoBvC,CuFnhoBE,gBAAqC,evFuhoBvC,CuFvhoBE,eAAqC,evF2hoBvC,CuF3hoBE,mBAAqC,evF+hoBvC,CuF/hoBE,gCAAqC,evFmioBvC,CuFnioBE,kDAAqC,evF2ioBvC,CuF3ioBE,kBAAqC,evF+ioBvC,CuF/ioBE,kBAAqC,evFmjoBvC,CuFnjoBE,eAAqC,evFujoBvC,CuFvjoBE,sBAAqC,evF2joBvC,CuF3joBE,oBAAqC,evF+joBvC,CuF/joBE,0BAAqC,evFmkoBvC,CuFnkoBE,sDAAqC,evF2koBvC,CuF3koBE,oBAAqC,evF+koBvC,CuF/koBE,gBAAqC,evFmloBvC,CuFnloBE,eAAqC,evFuloBvC,CuFvloBE,iBAAqC,evF2loBvC,CuF3loBE,wBAAqC,evF+loBvC,CuF/loBE,kBAAqC,evFmmoBvC,CuFnmoBE,kBAAqC,evFumoBvC,CuFvmoBE,kBAAqC,evF2moBvC,CuF3moBE,oBAAqC,evF+moBvC,CuF/moBE,wBAAqC,evFmnoBvC,CuFnnoBE,oBAAqC,evFunoBvC,CuFvnoBE,oDAAqC,evF+noBvC,CuF/noBE,qBAAqC,evFmooBvC,CuFnooBE,qBAAqC,evFuooBvC,CuFvooBE,mBAAqC,evF2ooBvC,CuF3ooBE,iBAAqC,evF+ooBvC,CuF/ooBE,oBAAqC,evFmpoBvC,CuFnpoBE,mBAAqC,evFupoBvC,CuFvpoBE,wBAAqC,evF2poBvC,CuF3poBE,qBAAqC,evF+poBvC,CuF/poBE,yBAAqC,evFmqoBvC,CuFnqoBE,uBAAqC,evFuqoBvC,CuFvqoBE,kBAAqC,evF2qoBvC,CuF3qoBE,qDAAqC,evFmroBvC,CuFnroBE,gBAAqC,evFuroBvC,CuFvroBE,iBAAqC,evF2roBvC,CuF3roBE,qBAAqC,evF+roBvC,CuF/roBE,sBAAqC,evFmsoBvC,CuFnsoBE,oDAAqC,evF2soBvC,CuF3soBE,uBAAqC,evF+soBvC,CuF/soBE,sCAAqC,evFutoBvC,CuFvtoBE,qBAAqC,evF2toBvC,CuF3toBE,6BAAqC,evF+toBvC,CuF/toBE,2BAAqC,evFmuoBvC,CuFnuoBE,iBAAqC,evFuuoBvC,CuFvuoBE,iBAAqC,evF2uoBvC,CuF3uoBE,kBAAqC,evF+uoBvC,CuF/uoBE,oBAAqC,evFmvoBvC,CuFnvoBE,gBAAqC,evFuvoBvC,CuFvvoBE,mBAAqC,evF2voBvC,CuF3voBE,kBAAqC,evF+voBvC,CuF/voBE,uBAAqC,evFmwoBvC,CuFnwoBE,6BAAqC,evFuwoBvC,CuFvwoBE,wBAAqC,evF2woBvC,CuF3woBE,iCAAqC,evF+woBvC,CuF/woBE,gBAAqC,evFmxoBvC,CuFnxoBE,mBAAqC,evFuxoBvC,CuFvxoBE,kBAAqC,evF2xoBvC,CuF3xoBE,mBAAqC,evF+xoBvC,CuF/xoBE,kBAAqC,evFmyoBvC,CuFnyoBE,yBAAqC,evFuyoBvC,CuFvyoBE,uBAAqC,evF2yoBvC,CuF3yoBE,sBAAqC,evF+yoBvC,CuF/yoBE,sBAAqC,evFmzoBvC,CuFnzoBE,oBAAqC,evFuzoBvC,CuFvzoBE,eAAqC,evF2zoBvC,CuF3zoBE,kBAAqC,evF+zoBvC,CuF/zoBE,2BAAqC,evFm0oBvC,CuFn0oBE,gBAAqC,evFu0oBvC,CuFv0oBE,kBAAqC,evF20oBvC,CuF30oBE,oBAAqC,evF+0oBvC,CuF/0oBE,gBAAqC,evFm1oBvC,CuFn1oBE,gDAAqC,evF21oBvC,CuF31oBE,iBAAqC,evF+1oBvC,CuF/1oBE,gDAAqC,evFu2oBvC,CuFv2oBE,sBAAqC,evF22oBvC,CuF32oBE,uFAAqC,evFu3oBvC,CuFv3oBE,oBAAqC,evF23oBvC,CuF33oBE,iBAAqC,evF+3oBvC,CuF/3oBE,gBAAqC,evFm4oBvC,CuFn4oBE,qBAAqC,evFu4oBvC,CuFv4oBE,mBAAqC,evF24oBvC,CuF34oBE,qBAAqC,evF+4oBvC,CuF/4oBE,kBAAqC,evFm5oBvC,CuFn5oBE,sBAAqC,evFu5oBvC,CuFv5oBE,kDAAqC,evF+5oBvC,CuF/5oBE,uBAAqC,evFm6oBvC,CuFn6oBE,iBAAqC,evFu6oBvC,CuFv6oBE,6BAAqC,evF26oBvC,CuF36oBE,mBAAqC,evF+6oBvC,CuF/6oBE,gBAAqC,evFm7oBvC,CuFn7oBE,0BAAqC,evFu7oBvC,CuFv7oBE,sBAAqC,evF27oBvC,CuF37oBE,wBAAqC,evF+7oBvC,CuF/7oBE,iBAAqC,evFm8oBvC,CuFn8oBE,mBAAqC,evFu8oBvC,CuFv8oBE,mBAAqC,evF28oBvC,CuF38oBE,yBAAqC,evF+8oBvC,CuF/8oBE,wBAAqC,evFm9oBvC,CuFn9oBE,kBAAqC,evFu9oBvC,CuFv9oBE,kBAAqC,evF29oBvC,CuF39oBE,0BAAqC,evF+9oBvC,CuF/9oBE,kDAAqC,evFu+oBvC,CuFv+oBE,wBAAqC,evF2+oBvC,CuF3+oBE,sBAAqC,evF++oBvC,CuF/+oBE,qBAAqC,evFm/oBvC,CuFn/oBE,wBAAqC,evFu/oBvC,CuFv/oBE,mBAAqC,evF2/oBvC,CuF3/oBE,kBAAqC,evF+/oBvC,CuF//oBE,qBAAqC,evFmgpBvC,CuFngpBE,gEAAqC,evF2gpBvC,CuF3gpBE,oBAAqC,evF+gpBvC,CuF/gpBE,gBAAqC,evFmhpBvC,CuFnhpBE,qBAAqC,evFuhpBvC,CuFvhpBE,iBAAqC,evF2hpBvC,CuF3hpBE,oBAAqC,evF+hpBvC,CuF/hpBE,iBAAqC,evFmipBvC,CuFnipBE,qBAAqC,evFuipBvC,CuFvipBE,uBAAqC,evF2ipBvC,CuF3ipBE,qBAAqC,evF+ipBvC,CuF/ipBE,kCAAqC,evFmjpBvC,CuFnjpBE,mBAAqC,evFujpBvC,CuFvjpBE,kBAAqC,evF2jpBvC,CuF3jpBE,iBAAqC,evF+jpBvC,CuF/jpBE,mBAAqC,evFmkpBvC,CuFnkpBE,mBAAqC,evFukpBvC,CuFvkpBE,2BAAqC,evF2kpBvC,CuF3kpBE,kBAAqC,evF+kpBvC,CuF/kpBE,yBAAqC,evFmlpBvC,CuFnlpBE,kBAAqC,evFulpBvC,CuFvlpBE,iBAAqC,evF2lpBvC,CuF3lpBE,cAAqC,evF+lpBvC,CuF/lpBE,eAAqC,evFmmpBvC,CuFnmpBE,wDAAqC,evF2mpBvC,CuF3mpBE,gBAAqC,evF+mpBvC,CuF/mpBE,sBAAqC,evFmnpBvC,CuFnnpBE,+BAAqC,evFunpBvC,CuFvnpBE,uBAAqC,evF2npBvC,CuF3npBE,qBAAqC,evF+npBvC,CuF/npBE,gBAAqC,evFmopBvC,CuFnopBE,qBAAqC,evFuopBvC,CuFvopBE,oBAAqC,evF2opBvC,CuF3opBE,gBAAqC,evF+opBvC,CuF/opBE,4BAAqC,evFmppBvC,CuFnppBE,kBAAqC,evFuppBvC,CuFvppBE,kBAAqC,evF2ppBvC,CuF3ppBE,iBAAqC,evF+ppBvC,CuF/ppBE,wBAAqC,evFmqpBvC,CuFnqpBE,iBAAqC,evFuqpBvC,CuFvqpBE,uBAAqC,evF2qpBvC,CuF3qpBE,0BAAqC,evF+qpBvC,CuF/qpBE,yBAAqC,evFmrpBvC,CuFnrpBE,qBAAqC,evFurpBvC,CuFvrpBE,yBAAqC,evF2rpBvC,CuF3rpBE,sBAAqC,evF+rpBvC,CuF/rpBE,mBAAqC,evFmspBvC,CuFnspBE,oBAAqC,evFuspBvC,CuFvspBE,wBAAqC,evF2spBvC,CuF3spBE,kCAAqC,evF+spBvC,CuF/spBE,mBAAqC,evFmtpBvC,CuFntpBE,mBAAqC,evFutpBvC,CuFvtpBE,gBAAqC,evF2tpBvC,CuF3tpBE,kBAAqC,evF+tpBvC,CuF/tpBE,qBAAqC,evFmupBvC,CuFnupBE,yBAAqC,evFuupBvC,CuFvupBE,sBAAqC,evF2upBvC,CuF3upBE,4DAAqC,evFmvpBvC,CuFnvpBE,uBAAqC,evFuvpBvC,CuFvvpBE,uBAAqC,evF2vpBvC,CuF3vpBE,2BAAqC,evF+vpBvC,CuF/vpBE,eAAqC,evFmwpBvC,CuFnwpBE,yBAAqC,evFuwpBvC,CuFvwpBE,0BAAqC,evF2wpBvC,CuF3wpBE,qBAAqC,evF+wpBvC,CuF/wpBE,mBAAqC,evFmxpBvC,CuFnxpBE,sBAAqC,evFuxpBvC,CuFvxpBE,oBAAqC,evF2xpBvC,CuF3xpBE,kBAAqC,evF+xpBvC,CuF/xpBE,kBAAqC,evFmypBvC,CuFnypBE,8CAAqC,evF2ypBvC,CuF3ypBE,oBAAqC,evF+ypBvC,CuF/ypBE,mBAAqC,evFmzpBvC,CuFnzpBE,wBAAqC,evFuzpBvC,CuFvzpBE,gBAAqC,evF2zpBvC,CuF3zpBE,oBAAqC,evF+zpBvC,CuF/zpBE,mBAAqC,evFm0pBvC,CuFn0pBE,mBAAqC,evFu0pBvC,CuFv0pBE,yBAAqC,evF20pBvC,CuF30pBE,eAAqC,evF+0pBvC,CuF/0pBE,kBAAqC,evFm1pBvC,CuFn1pBE,kBAAqC,evFu1pBvC,CuFv1pBE,sBAAqC,evF21pBvC,CuF31pBE,mBAAqC,evF+1pBvC,CuF/1pBE,kBAAqC,evFm2pBvC,CuFn2pBE,iBAAqC,evFu2pBvC,CuFv2pBE,sBAAqC,evF22pBvC,CuF32pBE,gBAAqC,evF+2pBvC,CuF/2pBE,yBAAqC,evFm3pBvC,CuFn3pBE,sBAAqC,evFu3pBvC,CuFv3pBE,mBAAqC,evF23pBvC,CuF33pBE,kBAAqC,evF+3pBvC,CuF/3pBE,gBAAqC,evFm4pBvC,CuFn4pBE,8BAAqC,evFu4pBvC,CuFv4pBE,mBAAqC,evF24pBvC,CuF34pBE,uBAAqC,evF+4pBvC,CuF/4pBE,oBAAqC,evFm5pBvC,CuFn5pBE,kBAAqC,evFu5pBvC,CuFv5pBE,qBAAqC,evF25pBvC,CuF35pBE,yBAAqC,evF+5pBvC,CuF/5pBE,oBAAqC,evFm6pBvC,CuFn6pBE,wCAAqC,evF26pBvC,CuF36pBE,0BAAqC,evF+6pBvC,CuF/6pBE,qBAAqC,evFm7pBvC,CuFn7pBE,0DAAqC,evF27pBvC,CuF37pBE,+BAAqC,evF+7pBvC,CuF/7pBE,kBAAqC,evFm8pBvC,CuFn8pBE,uBAAqC,evFu8pBvC,CuFv8pBE,qBAAqC,evF28pBvC,CuF38pBE,gBAAqC,evF+8pBvC,CuF/8pBE,qCAAqC,evFm9pBvC,CuFn9pBE,uBAAqC,evFu9pBvC,CuFv9pBE,kBAAqC,evF29pBvC,CuF39pBE,sDAAqC,evFm+pBvC,CuFn+pBE,kBAAqC,evFu+pBvC,CuFv+pBE,iBAAqC,evF2+pBvC,CuF3+pBE,iBAAqC,evF++pBvC,CuF/+pBE,oBAAqC,evFm/pBvC,CuFn/pBE,mBAAqC,evFu/pBvC,CuFv/pBE,qBAAqC,evF2/pBvC,CuF3/pBE,kBAAqC,evF+/pBvC,CuF//pBE,mBAAqC,evFmgqBvC,CuFngqBE,iBAAqC,evFugqBvC,CuFvgqBE,kDAAqC,evF+gqBvC,CuF/gqBE,iBAAqC,evFmhqBvC,CuFnhqBE,oBAAqC,evFuhqBvC,CuFvhqBE,uBAAqC,evF2hqBvC,CuF3hqBE,iBAAqC,evF+hqBvC,CuF/hqBE,kCAAqC,evFmiqBvC,CuFniqBE,yBAAqC,evFuiqBvC,CuFviqBE,mBAAqC,evF2iqBvC,CuF3iqBE,qBAAqC,evF+iqBvC,CuF/iqBE,kBAAqC,evFmjqBvC,CuFnjqBE,kBAAqC,evFujqBvC,CuFvjqBE,oBAAqC,evF2jqBvC,CuF3jqBE,oBAAqC,evF+jqBvC,CuF/jqBE,sBAAqC,evFmkqBvC,CuFnkqBE,iBAAqC,evFukqBvC,CuFvkqBE,4BAAqC,evF2kqBvC,CuF3kqBE,uBAAqC,evF+kqBvC,CuF/kqBE,oBAAqC,evFmlqBvC,CuFnlqBE,sBAAqC,evFulqBvC,CuFvlqBE,4BAAqC,evF2lqBvC,CuF3lqBE,wBAAqC,evF+lqBvC,CuF/lqBE,oBAAqC,evFmmqBvC,CuFnmqBE,yBAAqC,evFumqBvC,CuFvmqBE,sBAAqC,evF2mqBvC,CuF3mqBE,uBAAqC,evF+mqBvC,CuF/mqBE,kBAAqC,evFmnqBvC,CuFnnqBE,gBAAqC,evFunqBvC,CuFvnqBE,wBAAqC,evF2nqBvC,CuF3nqBE,wBAAqC,evF+nqBvC,CuF/nqBE,uBAAqC,evFmoqBvC,CuFnoqBE,qBAAqC,evFuoqBvC,CuFvoqBE,gBAAqC,evF2oqBvC,CuF3oqBE,kBAAqC,evF+oqBvC,CuF/oqBE,wBAAqC,evFmpqBvC,CuFnpqBE,gBAAqC,evFupqBvC,CuFvpqBE,kBAAqC,evF2pqBvC,CuF3pqBE,qBAAqC,evF+pqBvC,CuF/pqBE,qBAAqC,evFmqqBvC,CuFnqqBE,kBAAqC,evFuqqBvC,CuFvqqBE,mBAAqC,evF2qqBvC,CuF3qqBE,qBAAqC,evF+qqBvC,CuF/qqBE,0BAAqC,evFmrqBvC,CuFnrqBE,qBAAqC,evFurqBvC,CuFvrqBE,0BAAqC,evF2rqBvC,CuF3rqBE,yBAAqC,evF+rqBvC,CuF/rqBE,kBAAqC,evFmsqBvC,CuFnsqBE,kBAAqC,evFusqBvC,CuFvsqBE,iBAAqC,evF2sqBvC,CuF3sqBE,kBAAqC,evF+sqBvC,CuF/sqBE,8BAAqC,evFmtqBvC,CuFntqBE,gBAAqC,evFutqBvC,CuFvtqBE,0CAAqC,evF+tqBvC,CuF/tqBE,4BAAqC,evFmuqBvC,CuFnuqBE,sBAAqC,evFuuqBvC,CuFvuqBE,0BAAqC,evF2uqBvC,CuF3uqBE,mBAAqC,evF+uqBvC,CuF/uqBE,eAAqC,evFmvqBvC,CuFnvqBE,uBAAqC,evFuvqBvC,CuFvvqBE,iBAAqC,evF2vqBvC,CuF3vqBE,wBAAqC,evF+vqBvC,CuF/vqBE,gBAAqC,evFmwqBvC,CuFnwqBE,mBAAqC,evFuwqBvC,CuFvwqBE,kBAAqC,evF2wqBvC,CuF3wqBE,8CAAqC,evFmxqBvC,CuFnxqBE,gCAAqC,evFuxqBvC,CuFvxqBE,gBAAqC,evF2xqBvC,CuF3xqBE,eAAqC,evF+xqBvC,CuF/xqBE,oDAAqC,evFuyqBvC,CuFvyqBE,kBAAqC,evF2yqBvC,CuF3yqBE,mBAAqC,evF+yqBvC,CuF/yqBE,iBAAqC,evFmzqBvC,CuFnzqBE,gBAAqC,evFuzqBvC,CuFvzqBE,sBAAqC,evF2zqBvC,CuF3zqBE,kBAAqC,evF+zqBvC,CuF/zqBE,yBAAqC,evFm0qBvC,CuFn0qBE,sBAAqC,evFu0qBvC,CuFv0qBE,kBAAqC,evF20qBvC,CuF30qBE,uBAAqC,evF+0qBvC,CuF/0qBE,4CAAqC,evFu1qBvC,CuFv1qBE,kDAAqC,evF+1qBvC,CuF/1qBE,kBAAqC,evFm2qBvC,CuFn2qBE,kCAAqC,evFu2qBvC,CuFv2qBE,sBAAqC,evF22qBvC,CuF32qBE,mBAAqC,evF+2qBvC,CuF/2qBE,iBAAqC,evFm3qBvC,CuFn3qBE,kBAAqC,evFu3qBvC,CuFv3qBE,0BAAqC,evF23qBvC,CuF33qBE,mBAAqC,evF+3qBvC,CuF/3qBE,qBAAqC,evFm4qBvC,CuFn4qBE,mBAAqC,evFu4qBvC,CuFv4qBE,kBAAqC,evF24qBvC,CuF34qBE,mBAAqC,evF+4qBvC,CuF/4qBE,gBAAqC,evFm5qBvC,CuFn5qBE,0BAAqC,evFu5qBvC,CuFv5qBE,oBAAqC,evF25qBvC,CuF35qBE,cAAqC,evF+5qBvC,CuF/5qBE,iBAAqC,evFm6qBvC,CuFn6qBE,eAAqC,evFu6qBvC,CuFv6qBE,eAAqC,evF26qBvC,CuF36qBE,kBAAqC,evF+6qBvC,CuF/6qBE,gCAAqC,evFm7qBvC,CuFn7qBE,mBAAqC,evFu7qBvC,CuFv7qBE,gBAAqC,evF27qBvC,CuF37qBE,kBAAqC,evF+7qBvC,CuF/7qBE,eAAqC,evFm8qBvC,CuFn8qBE,kBAAqC,evFu8qBvC,CuFv8qBE,mBAAqC,evF28qBvC,CuF38qBE,oBAAqC,evF+8qBvC,CuF/8qBE,2BAAqC,evFm9qBvC,CuFn9qBE,kBAAqC,evFu9qBvC,CuFv9qBE,gBAAqC,evF29qBvC,CuF39qBE,mBAAqC,evF+9qBvC,CuF/9qBE,mBAAqC,evFm+qBvC,CuFn+qBE,mBAAqC,evFu+qBvC,CuFv+qBE,qBAAqC,evF2+qBvC,CuF3+qBE,kBAAqC,evF++qBvC,CuF/+qBE,eAAqC,evFm/qBvC,CuFn/qBE,kBAAqC,evFu/qBvC,CuFv/qBE,eAAqC,evF2/qBvC,CuF3/qBE,oBAAqC,evF+/qBvC,CuF//qBE,8BAAqC,evFmgrBvC,CuFngrBE,6BAAqC,evFugrBvC,CuFvgrBE,mBAAqC,evF2grBvC,CuF3grBE,8CAAqC,evFmhrBvC,CuFnhrBE,wBAAqC,evFuhrBvC,CuFvhrBE,kBAAqC,evF2hrBvC,CuF3hrBE,sDAAqC,evFmirBvC,CuFnirBE,mBAAqC,evFuirBvC,CuFvirBE,uBAAqC,evF2irBvC,CuF3irBE,uCAAqC,evFmjrBvC,CuFnjrBE,iBAAqC,evFujrBvC,CuFvjrBE,eAAqC,evF2jrBvC,CuF3jrBE,kBAAqC,evF+jrBvC,CuF/jrBE,kBAAqC,evFmkrBvC,CuFnkrBE,iBAAqC,evFukrBvC,CuFvkrBE,4BAAqC,evF2krBvC,CuF3krBE,uBAAqC,evF+krBvC,CuF/krBE,sCAAqC,evFulrBvC,CuFvlrBE,kBAAqC,evF2lrBvC,CuF3lrBE,oBAAqC,evF+lrBvC,CuF/lrBE,qBAAqC,evFmmrBvC,CuFnmrBE,mBAAqC,evFumrBvC,CuFvmrBE,yBAAqC,evF2mrBvC,CuF3mrBE,kBAAqC,evF+mrBvC,CuF/mrBE,qBAAqC,evFmnrBvC,CuFnnrBE,kBAAqC,evFunrBvC,CuFvnrBE,oBAAqC,evF2nrBvC,CuF3nrBE,kBAAqC,evF+nrBvC,CuF/nrBE,+BAAqC,evFmorBvC,CuFnorBE,uBAAqC,evFuorBvC,CuFvorBE,gBAAqC,evF2orBvC,CuF3orBE,0CAAqC,evF+orBvC,CuF/orBE,kBAAqC,evFmprBvC,CuFnprBE,iBAAqC,evFuprBvC,CuFvprBE,+BAAqC,evF2prBvC,CuF3prBE,qBAAqC,evF+prBvC,CuF/prBE,kBAAqC,evFmqrBvC,CuFnqrBE,4BAAqC,evFuqrBvC,CuFvqrBE,uBAAqC,evF2qrBvC,CuF3qrBE,gBAAqC,evF+qrBvC,CuF/qrBE,sBAAqC,evFmrrBvC,CuFnrrBE,oBAAqC,evFurrBvC,CuFvrrBE,iBAAqC,evF2rrBvC,CuF3rrBE,kBAAqC,evF+rrBvC,CuF/rrBE,eAAqC,evFmsrBvC,CuFnsrBE,wBAAqC,evFusrBvC,CwFnurBA,KAOE,wBAAyB,CACzB,8DAAmE,CACnE,6BAA8B,CCH9B,yBAA0B,CAI1B,2BAA4B,CAC5B,2BAA4B,CAC5B,0BAA2B,CAC3B,yBAA0B,CAC1B,0BAA2B,CAC3B,uBAAwB,CAGxB,4BAA6B,CAG7B,8BAA+B,CAC/B,qCAAsC,CACtC,qCAAsC,CACtC,oCAAqC,CAGrC,wCAAyC,CAGzC,6BAA8B,CAC9B,6BAA8B,CAI9B,uKAGA,6HAEA,yDAA0D,CAC1D,4DAA6D,CAC7D,mEAAoE,CCpCpE,2BAA4B,CAG5B,4BACA,2BACA,oCACA,kCACA,4BACA,yBACA,wBACA,0BACA,2BACA,6BACA,4BACA,sBACA,sBACA,qBACA,oBACA,sBAGA,6BCtBA,kDAAmD,CACnD,sDAAuD,CACvD,kEAAmE,CACnE,kEAAmE,CACnE,kEAAmE,CACnE,iEAAkE,CAClE,wDAAyD,CACzD,oDAAqD,CACrD,mDAAoD,CACpD,kEAAmE,CACnE,mDAAoD,CACpD,iDAAkD,CCXlD,qEAAsE,CACtE,mEAAoE,CACpE,qEAAsE,CACtE,wEAAyE,CCPzE,mCAAoC,CACpC,wD7F0urBF,C6FvurBA,KACE,4CAA6C,CAI7C,gCAAiC,CAEjC,YAAa,CACb,qBAAsB,CANtB,uCAAwC,CACxC,eAAgB,CAChB,gBJoCiB,CIlCjB,gB7ForsBF,C6F/qsBE,8BACE,4C7FirsBJ,C6F7qsBA,EAEE,aAAc,CADd,qB7FkrsBF,C6F9qsBE,SACE,+C7FgrsBJ,C6F7qsBE,WACE,iB7F+qsBJ,C6F3qsBA,ECkCE,oBAAqB,CACrB,2BAA4B,CAvC5B,yBAA0B,CAGxB,2CAvBuB,CA2BvB,6B9FgrsBJ,C8F5osBE,QACE,iCAAkC,CA1BlC,6BAA8B,CAH9B,iD9F6qsBJ,C8FrosBE,mBACE,2B9F0osBJ,C8FxosBI,gBACE,iC9F0osBN,C6F7rsBE,aACE,gCAAiC,CACjC,cAAgB,CAEhB,gBAAkB,CADlB,aAAc,CAEd,oBAAqB,CACrB,gB7F+rsBJ,C6FzrsBI,gCACE,iCAAkC,CAClC,0BAA2B,CAC3B,mB7F2rsBN,C6FvrsBE,gBACE,8B7FyrsBJ,C6FtrsBE,gBACE,8B7FwrsBJ,C6FprsBA,0CAEE,0CAA2C,CAC3C,0CAA2C,CAC3C,gBAAiB,CAHjB,wB7F0rsBF,C6FprsBA,OAIE,iCAAkC,CADlC,Y7FursBF,C6FlrsBA,cAHE,8B7F0rsBF,C6FvrsBA,OAGE,iC7ForsBF,C6FhrsBA,OAGE,iC7FkrsBF,C6F9qsBA,cAHE,8B7FsrsBF,C6FnrsBA,OAGE,iC7FgrsBF,C6F5qsBA,OAGE,iC7F8qsBF,C6F1qsBA,cAHE,gC7FkrsBF,C6F/qsBA,OAGE,iC7F4qsBF,C6FxqsBA,yBAEE,oC7F2qsBF,C6FxqsBA,GACE,QAAS,CACT,4C7F2qsBF,C6FxqsBA,kBAIE,4C7F2qsBF,C6FxqsBA,IAEE,+CAAgD,CAChD,iC7F0qsBF,C6FvqsBE,mBACE,wCAAyC,CAGzC,8CAA+C,CAF/C,cAAgB,CAChB,mB7F0qsBJ,C6FrqsBA,KACE,kC7FwqsBF,C6FrqsBA,IAGE,yCAA0C,CAG1C,wCAAyC,CACzC,oBL/HyB,CK4HzB,gCAAiC,CACjC,iBAAkB,CAJlB,cAAe,CACf,Y7F6qsBF,C6FtqsBE,aAEE,UAAY,CACZ,kB7FuqsBJ,C6FlqsBA,iBAQE,2CAA4C,CAC5C,WAAY,CAFZ,qCAAsC,CAJtC,YAAa,CAEb,SAAU,CAHV,cAAe,CAEf,QAAS,CAET,yBAA0B,CAL1B,Y7F6qsBF,C6FnqsBE,8BAGE,sB7FmqsBJ,C6FhqsBE,uBAIE,qDAAsD,CClIxD,iCAAkC,CDmIhC,+CAAgD,CChKlD,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CDqK9B,6BAA8B,CCvJ9B,6B9F+zsBJ,C6FnqsBE,+BACE,eAAgB,CAChB,8CEvKiB,CFwKjB,wCAAyC,CACzC,uB7FqqsBJ,C6F5psBA,eAEE,eAAgB,CADhB,8C7FgqsBF,CgGz2sBA,WAME,yCAA0C,CAG1C,+CAAgD,CANhD,MAAO,CAIP,aAAe,CANf,cAAe,CAGf,OAAQ,CACR,iBAAkB,CAHlB,KAAM,CAUN,2BAA4B,CAC5B,qCAAuC,CALvC,YhGq3sBF,CgG92sBE,wBACE,uBhGg3sBJ,CgG72sBE,aAEE,6ChG82sBJ,CgG52sBI,2BAEE,qBhG62sBN,CiG74sBA,cAEE,YAAa,CADb,WAAY,CAEZ,sBjGg5sBF,CiG94sBE,mCACE,YjGg5sBJ,CiG54sBA,eACE,UjG+4sBF,Ca31sBI,yBoFrDJ,eAII,ejGg5sBF,CACF,CkG/5sBA,2BAGE,QAAS,CACT,eAAgB,CAIhB,iClG65sBF,CkG35sBE,gCAVF,2BAWI,elG85sBF,CACF,CkG35sBA,mDAME,kBAAmB,CAFnB,YAAa,CAGb,sBAAuB,CALvB,eAAgB,CAOhB,mBAAqB,CAJrB,iBAAkB,CAGlB,iBAAkB,CALlB,UlGo6sBF,Ca12sBI,4BqF7DJ,mDAaI,gBlG+5sBF,CACF,CkG75sBE,uDACE,eAAiB,CACjB,QlGg6sBJ,CkG55sBE,uDACE,wClG+5sBJ,CkG35sBE,yHAOE,wCAJmB,CAKnB,oCALmB,CAOnB,oBAAsB,CC5CxB,+FACE,CD0CA,kClG05sBJ,CkGv5sBI,qIAKE,kDAbuB,CAcvB,8CAduB,CJc3B,iCAAkC,CIC9B,4CAA6C,CJ9BjD,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CIkC5B,6BAA8B,CJpBhC,6B9Fo7sBJ,CkG15sBI,qJACE,+CACA,uBlG65sBN,CkGv5sBA,wBACE,8ClG05sBF,CkGv5sBA,2BACE,2ClG05sBF,CoGp+sBA,SAGE,YAAa,CADb,qBAAsB,CADtB,WAAY,CAGZ,WpG0+sBF,CoGx+sBE,qBACE,YAAa,CAEb,WAAY,CADZ,sBpG2+sBJ,CoGx+sBI,2CAEE,YAAa,CACb,qBAAsB,CAFtB,qBAAsB,CAQtB,cAAe,CACf,eAAgB,CAChB,YAAa,CAHb,UpGy+sBN,Cah8sBI,0BuFpCE,uDAII,iBAAkB,CADlB,kBpGs+sBR,CACF,CqGrgtBA,WAEE,4CAA6C,CAD7C,UrGygtBF,CqGtgtBE,6BACE,YAAa,CACb,WAAY,CAEZ,WAAY,CADZ,YrGygtBJ,CqGrgtBE,+FAGE,YAAa,CACb,qBAAsB,CAGtB,WAAY,CAFZ,SAAW,CACX,sBrGwgtBJ,CqGpgtBE,iCACE,iBrGsgtBJ,CqGngtBE,8BACE,crGqgtBJ,CqGjgtBE,0BACE,erGmgtBJ,CsGlitBA,mBACE,etGqitBF,CsGnitBE,yCACE,YAAa,CACb,qBtGqitBJ,CuGzitBE,yCACE,YAAa,CACb,qBAAsB,CACtB,evG4itBJ,CwGvitBA,WAME,yDAA2D,CAC3D,qDAAwD,CAIxD,sBAAuB,CADvB,eAAgB,CADhB,SAAU,CARV,eAAgB,CAChB,KAAM,CAMN,UAAW,CALX,YxGojtBF,CwG1itBE,6BAEE,kBAAmB,CADnB,YAAa,CAEb,kBAAmB,CACnB,iBAAkB,CAClB,kBxG4itBJ,CwGzitBE,0BACE,qBxG2itBJ,CwGvitBE,wBAIE,kBAAmB,CADnB,YAAa,CAFb,+BAAgC,CAChC,mCxG2itBJ,CwGritBE,gCACE,YAAa,CACb,axGuitBJ,CarhtBI,yB2FpBF,gCAKI,eAAgB,CAChB,WAAY,CACZ,mBxGwitBJ,CACF,CwGritBE,oHAIE,kBAAmB,CADnB,YAAa,CAEb,cAAe,CAGf,SxGqitBJ,CwGlitBE,6EAEE,kBxGoitBJ,CwGhitBE,uCACE,aAAc,CAEd,SAAW,CADX,iBxGmitBJ,CwG/htBE,qCAEE,mBxGgitBJ,CwG5htBE,yBACE,YxG8htBJ,CanjtBI,yB2FoBF,yBAKI,oBxG8htBJ,CACF,CwG5htBI,qCACE,iBxG8htBN,CwG5htBM,+CV0FJ,iCAAkC,CUvF5B,kBAAmB,CV2FzB,iB9Fm8sBF,C8Fh8sBE,sDAKE,4BAA6B,CAJ7B,UAAW,CACX,aAAc,CAEd,OAAQ,CAIN,0CACA,iCANF,iB9Fs8sBJ,C8F57sBE,qDACE,gCAAiC,CACjC,oB9F87sBJ,C8F77sBI,4DAEI,sE9F87sBR,C8Fv7sBE,6DACE,eAAgB,CAChB,yCAA0C,CAC1C,kB9Fy7sBJ,CwG/itBQ,uDACE,8BxGijtBV,CwG9itBU,8DACE,gDxGgjtBZ,CwG3itBM,8CACE,iBxG6itBR,CwG3itBQ,qDACE,kBxG6itBV,CwG1itBQ,+DACE,qBhBnFU,CgBoFV,iCxG4itBV,CwG1itBU,6EACE,iDxG4itBZ,CwGzitBU,qEAEE,sDAEA,gCAAiC,CAHjC,oBxG6itBZ,CwGpitBI,qDVpCF,iCAAkC,CAClC,oB9F2ktBF,C8FzktBE,2DACE,iCAAkC,CAzEpC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9FkptBJ,CwG1itBM,0CAEE,WAAY,CADZ,axG6itBR,CwG1itBQ,gDVtFN,iCAAkC,CA7BlC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9F8ptBJ,CwG7itBM,kDAIE,+CAAgD,CAFhD,wCAAyC,CACzC,kDAAqD,CAGrD,cAAgB,CAChB,eAAgB,CAFhB,eAAiB,CAJjB,YxGqjtBR,CwG7itBQ,iEAGE,qBxG6itBV,CwG1itBU,2FACE,wBxG4itBZ,CwGzitBU,+EACE,UxG2itBZ,CwGtitBQ,6DACE,YxGwitBV,CwG7htBE,iCAIE,wBAAyB,CAFzB,4BAA6B,CAD7B,mCAAoC,CAEpC,eAAgB,CAEhB,axG+htBJ,CwG5htBE,iCACE,iBxG8htBJ,CapqtBI,yB2FqIF,iCAII,YxG+htBJ,CACF,CwG5htBE,mCACE,gBxG8htBJ,Ca5qtBI,0B2F6IF,mCAII,YxG+htBJ,CACF,CajrtBI,yB2FwJF,kCACE,oBxG6htBF,CACF,CwG1htBA,UAME,exGuhtBF,CwG5htBE,gBVjKA,iCAAkC,CA7BlC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9F2ttBJ,CwG7htBE,6BAEE,qCAAsC,CADtC,yBAA0B,CAE1B,eAAiB,CACjB,gBxG+htBJ,CwG3htBA,kCACE,eAAiB,CACjB,gBAAiB,CACjB,qBxG8htBF,CwG1htBA,2BACE,gBxG6htBF,CalttBI,yB2FoLJ,2BAII,YxG8htBF,CACF,CwG1htBA,8BACE,YxG6htBF,Ca3ttBI,yB2F6LJ,8BAII,YxG8htBF,CACF,CyG/xtBA,uBACE,ezGkytBF,CyG/xtBE,4CACE,2CzGiytBJ,CyG9xtBE,kDACE,gBzGgytBJ,C0GlytBA,oBAaE,4CAA6C,CAD7C,8CAA+C,CAX/C,YAAa,C3FuBX,aAAc,C2FtBhB,qBAAsB,CAatB,6CAA8C,CAZ9C,QAAS,CACT,iDAAkD,CAUlD,eAAgB,CAHhB,uBANA,eAAgB,CAChB,4BAA6B,C3FmB3B,Sf6xtBJ,Ca9vtBI,yB6FxDJ,oBAkBI,sC1GwytBF,CACF,C0GtytBE,mCACE,qB1GwytBJ,C0GpytBE,8BACE,6C1GsytBJ,C0GnytBE,+BACE,c1GqytBJ,Ca5wtBI,yB6FtBF,iCAEI,Y1GoytBJ,CACF,C0GhytBE,4LAIE,gC1GqytBJ,C0GhytBI,8IACE,e1GmytBN,C0G9xtBE,0CACE,YAAa,CACb,qB1GgytBJ,C0G9xtBI,uEAGE,gCAAiC,CADjC,6CAA8C,CAD9C,iDAAkD,CAGlD,mB1GgytBN,C0G3xtBQ,sFACE,eAAgB,CAChB,8CXjDW,CWkDX,uB1G6xtBV,C0GvxtBI,wEACE,YAAa,CACb,qB1GyxtBN,C0GrxtBI,qEAEE,kBAAmB,CADnB,YAAa,CAEb,Q1GuxtBN,CatztBI,yB6FAF,0CAmCI,Y1GuxtBJ,CACF,C0GpxtBE,kDAEE,4C1GqxtBJ,Ca9ztBI,yB6FuCF,kDAKI,e1GsxtBJ,CACF,C0GnxtBE,gDAEE,iBAAkB,CADlB,e1GsxtBJ,C0GlxtBE,kCACE,eAAgB,CAChB,c1GoxtBJ,C0G9wtBQ,6EAME,oBAAqB,CAFrB,YAAa,CAFb,WAAY,CAGZ,6BAA8B,CAJ9B,iBAAkB,CAElB,U1GmxtBV,C0G9wtBU,6FAGE,a1G8wtBZ,C0G1wtBY,8GACE,c1G4wtBd,C0GpwtBE,oCAGE,iB1GowtBJ,C0GlwtBI,4FAEE,mCAIA,kB1GiwtBN,C0G7vtBM,oDAEE,e1G8vtBR,C0G5vtBQ,4EACE,Y1G8vtBV,C0G1vtBQ,kEACE,Y1G4vtBV,C0G1vtBU,kFACE,8CXnJS,CWoJT,wB1G4vtBZ,C0GvvtBQ,oEAgBE,kBAAmB,CAfnB,cAAe,CAaf,mBAAoB,CAHpB,WA5CiB,CAgDjB,sBAAuB,CAVvB,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAIN,U1GwvtBV,C0GhvtBU,qFACE,gB1GkvtBZ,C0GzutBU,2EACE,wB1G2utBZ,C0GlutBA,aACE,kB1GsutBF,Cap4tBI,yB6F6JJ,aAII,a1GuutBF,CACF,C0GrutBE,gBACE,aAAc,CACd,e1GuutBJ,C0GputBI,mBACE,kB1GsutBN,C0GlutBE,kBAME,eAAgB,CZ9HlB,iCAAkC,CYyHhC,aAAc,CAMd,qBX9Ne,CWyNf,sBZzHF,oB9Fi2tBF,C8F/1tBE,wBAEE,4BAA6B,CAD7B,yBAA0B,CAxE1B,6BAA8B,CAH9B,iD9Fg7tBJ,C8F71tBE,iDANE,iC9Fs2tBJ,C8F51tBE,gCACE,iDC5GoB,CD6GpB,YAAa,CACb,U9F81tBJ,C0G/utBM,2CAEE,qCAAsC,CADtC,yBAA0B,CAE1B,eAAiB,CACjB,gB1GivtBR,C0G5utBE,wBAGE,4BAA6B,CZtG7B,qEANe,CAHjB,8BAA+B,CAD/B,e9F+1tBF,C8Fn1tBI,sCACE,6GACA,Y9Fq1tBN,C0G/utBE,+BACE,6C1GmvtBJ,C0G7utBE,sDALE,iDAAkD,CAClD,mB1GyvtBJ,C0GrvtBE,uBAKE,gCAAiC,CAMjC,6CAA8C,CAR9C,kBAAmB,CADnB,iB1GmvtBJ,C0G9utBI,mCACE,Y1GgvtBN,Cav8tBI,yB6F+MF,uBAcI,sC1G8utBJ,CACF,C2GvguBA,sBAiBE,4CAA6C,CAhB7C,YAAa,CAGb,qBAAsB,CADtB,aAAc,CAOd,6CAA8C,CAH9C,iDAAkD,CALlD,OAAQ,CAgBR,eAAgB,CAVhB,sBAAuB,CAHvB,eAAgB,CAChB,4BAA6B,CAG7B,kC3GihuBF,Ca/9tBI,0B8F3DJ,sBAaI,sC3GihuBF,CACF,C2G1guBA,wBACE,a3G6guBF,Cax+tBI,0B8FtCJ,wBAII,6CAA8C,CAC9C,iB3G8guBF,CACF,C2G5guBE,0BACE,mB3G8guBJ,C4GvguBA,sBACE,qBAAuB,CACvB,U5GyhuBF,Cax/tBI,4B+F9BJ,oBAhBE,QAAS,CANT,cAAe,CAHf,YAAa,CAgBX,MAAO,CADP,gBAAiB,CAdnB,gBAAiB,CAGjB,eAAgB,CAPhB,cAAe,CACf,KAAM,CAON,sDACE,CAEF,iBAAkB,CANlB,SAAU,CAHV,Y5GikuBA,CACF,C4GniuBE,0BACE,aAAc,CACd,kB5GqiuBJ,Ca9guBI,6B+FnBJ,sBA3BE,QAAS,CANT,cAAe,CAHf,YAAa,CAYX,iBAAkB,CAXpB,gBAAiB,CAGjB,eAAgB,CAPhB,cAAe,CAgBb,OAAQ,CAfV,KAAM,CAON,sDACE,CAEF,iBAAkB,CANlB,SAAU,CAHV,Y5GuluBA,CACF,C4G9iuBE,4BACE,cAAe,CACf,kB5GgjuBJ,C6G7muBA,kBAGE,YAAa,CACb,cAAe,CAGf,eAAiB,CANjB,eAAgB,CAChB,c7GsnuBF,C6G/muBE,qCAEE,kBAAmB,CADnB,YAAa,CAiBb,eAAiB,CAdjB,iBAAkB,CADlB,kB7GmnuBJ,C6GhnuBI,sFAOE,edHa,CcFb,iBAAkB,CAClB,sB7GmnuBN,C6GxmuBI,uCfoEF,iCAAkC,CAClC,oB9FuiuBF,C8FriuBE,6CACE,iCAAkC,CAzEpC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9F8muBJ,C6G/muBI,kEAIE,iCAAkC,CADlC,qCAAsC,CAFtC,yBAA0B,CAC1B,eAAiB,CAGjB,e7GinuBN,C8GrpuBE,sBAKE,kBAAmB,CAKnB,WAAY,CADZ,eAAgB,CXmDlB,qBAAsB,CLsHtB,iCAAkC,CgB9KhC,YAAa,CAOb,cAAe,CAKf,eAVA,sBAAuB,CAMvB,gBrB2Be,CUuBjB,eAAgB,CADhB,cAAe,CWhDb,iBhByKF,iB9Fm/tBF,C8Fh/tBE,6BAKE,4BAA6B,CAJ7B,UAAW,CACX,aAAc,CAEd,OAAQ,CAIN,0CACA,iCANF,iB9Fs/tBJ,C8F5+tBE,4BACE,gCAAiC,CACjC,oB9F8+tBJ,C8F7+tBI,mCAEI,sE9F8+tBR,C8Fv+tBE,oCACE,eAAgB,CAChB,yCAA0C,CAC1C,kB9Fy+tBJ,C8G1quBA,qBAKE,kBAAmB,CAFnB,kBtBcoB,CsBhBpB,YAAa,CACb,kBAAmB,CAEnB,4BAA6B,CAI7B,eAAgB,CADhB,eAAgB,CADhB,c9G+quBF,C8GzquBI,mGAKE,mCAAoC,CADpC,iBAAkB,CADlB,qB9G8quBN,C8GxquBI,gDACE,a9G0quBN,C8GvquBI,+CACE,U9GyquBN,C8GtquBI,2CACE,a9GwquBN,C8GnquBE,yCAEE,mBAAqB,CADrB,Y9GsquBJ,C8GlquBE,gCACE,kCAAmC,CACnC,qBAAsB,CACtB,gB9GoquBJ,C+GruuBA,cAWE,kBAAmB,CAJnB,YAAa,CAGb,aAAc,CAEd,SAAW,CAVX,+BAAgC,CAIhC,QAAS,CAHT,mCAAoC,CACpC,eAAiB,CAHjB,iBAAkB,CAIlB,U/GgvuBF,C+GtuuBE,gBACE,gCAAiC,CACjC,e/GwuuBJ,C+GpuuBE,kBAEE,WAAY,CADZ,cAAe,CAEf,U/GsuuBJ,C+GnuuBE,gDjB6BA,iCAAkC,CiBzBhC,gCAAiC,CjBJnC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9FquuBJ,CgHtwuBE,iBACE,kBhH4wuBJ,CgHxwuBE,iBACE,YAAa,CACb,qBhH0wuBJ,CgHxwuBI,mBAEE,kBAAmB,ClBoFvB,iCAAkC,CkBrF9B,YAAa,CAEb,WAAY,CAEZ,qBxBmBkB,CwBpBlB,kBxBoBkB,CM+DtB,oB9F0ruBF,C8FxruBE,yBACE,iCAAkC,CAzEpC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9FiwuBJ,CiHnyuBE,uBAEE,kBAAmB,CADnB,cjH0yuBJ,CiHvyuBI,0BACE,iBjHyyuBN,CiHpyuBE,oBACE,6CjHsyuBJ,CatvuBI,0BoGjDF,oBAII,sCjHuyuBJ,CACF,CiHpyuBE,sBACE,gCAAiC,CACjC,iDAAkD,CAClD,mBjHsyuBJ,CkH5zuBA,gBACE,UlHk0uBF,CkHh0uBE,kBACE,iCAAkC,CAElC,iBAAkB,CADlB,alHm0uBJ,CkH/zuBE,kBACE,elHi0uBJ,CkH9zuBE,kBAGE,kBAAmB,CACnB,WAAY,CAIZ,iCAAkC,CANlC,YAAa,CAIb,aAAc,CACd,iBAAkB,CAFlB,YAAa,CAIb,oBlH+zuBJ,CkH7zuBI,oCpB0CF,oBAAqB,CACrB,2BAA4B,CoBvCxB,eAAgB,CADhB,qDAAsD,CpBC1D,yBAA0B,CAGxB,2CAvBuB,CA2BvB,6B9F2zuBJ,C8FvxuBE,0CACE,iCAAkC,CA1BlC,6BAA8B,CAH9B,iD9FwzuBJ,C8FhxuBE,uFACE,2B9FqxuBJ,C8FnxuBI,kDACE,iC9FqxuBN,CkH30uBM,4FpBwBJ,iCAAkC,CA7BlC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9Fi1uBJ,CkH90uBI,kCACE,qBAAsB,CACtB,alHg1uBN,CkH90uBM,sDACE,yBlHg1uBR,CkH50uBI,4BACE,UlH80uBN,CkH30uBI,6BACE,WlH60uBN,CkH30uBM,gDACE,gBlH60uBR,CmHp4uBA,WAME,wCAAyC,CADzC,oB3BwByB,C2BtBzB,gCAAiC,CAJjC,SAAW,CADX,kBAAoB,CADpB,iBnHg5uBF,CmHv4uBE,6BANA,4CnHi5uBF,CmH34uBE,kBAEE,iCnHy4uBJ,CmHr4uBE,wBACE,iDnHu4uBJ,CmHr4uBI,oCACE,enHu4uBN,CmHn4uBE,iBAEE,6BAA8B,CAC9B,SAAU,CAFV,iBnHu4uBJ,CmHl4uBE,yCAGE,iCAAkC,CADlC,0BAAgC,CADhC,iBnHs4uBJ,CmHj4uBE,8BACE,4CAA6C,CAE7C,WAAY,CADZ,gCnHo4uBJ,CmHh4uBI,2CACE,iCnHk4uBN,CmH93uBI,qHAEE,enH+3uBN,CmH53uBI,gFAEE,iCnH63uBN,CmHx3uBE,wCAGE,6BAA8B,CAF9B,YAAa,CACb,uBnH23uBJ,Ca53uBI,yBsGDF,wCAMI,YnH23uBJ,CACF,CmHp3uBA,iBAEE,gBnHy3uBF,CmHn3uBA,mBACE,YnHy3uBF,CmHv3uBE,yBAaE,4BAA6B,CAE7B,WAAY,CAdZ,YAAa,CAMb,QAAS,CAGT,gBAAkB,CAElB,eAAgB,CAEhB,gBpB/Ee,CoBqEf,cAAe,CAKf,UAAW,CAHX,OAAQ,CAER,8BAAgC,CAGhC,SAAU,CANV,YnHi4uBJ,CmHr3uBI,mCACE,qBAAuB,CACvB,UnHu3uBN,CmHp3uBI,wCACE,WnHs3uBN,CmHn3uBM,0FAEE,mCnHq3uBR,CmH32uBA,qBAIE,kBAAmB,CAKnB,yCAA0C,CAJ1C,wCAAyC,CACzC,mBAL8B,CAM9B,iCAAkC,CAJlC,mBAAoB,CAKpB,YnHi3uBF,CmH92uBE,2BACE,qDnHg3uBJ,CmH72uBE,mCACE,mBnH+2uBJ,CmH32uBE,kDACE,sCAAuC,CACvC,0CAA2C,CAE3C,gBAAkB,CADlB,iBnH82uBJ,CmH12uBE,6CACE,enH42uBJ,CmHx2uBE,uBACE,kBnH02uBJ,CmHt2uBE,+BACE,YnHw2uBJ,Ca58uBI,yBsGmGF,+BAII,YnHy2uBJ,CACF,CoHxgvBE,+BjBAA,+FACE,CiBAA,aAAc,CACd,iBpHkhvBJ,Ca79uBI,0BuGvDF,+BAMI,gBpHkhvBJ,CACF,CoH5gvBI,iCAIE,yCAA0C,CAH1C,oBAAsB,CAItB,mCAAoC,CAHpC,iBAAkB,CAClB,cAAgB,CAGhB,oBAAqB,CAGrB,mCpH4gvBN,CoH1gvBM,uCACE,8CpH4gvBR,CoHzgvBM,wCAEE,WAAY,CADZ,oCAAqC,CAErC,yBAA0B,CAC1B,kBpH2gvBR,CqH9ivBE,mCACE,YrHojvBJ,CqHljvBI,0CAEE,iCAAkC,CADlC,oBrHqjvBN,CqHjjvBI,0CACE,gBrHmjvBN,CqH7ivBE,0NAGE,crHsjvBJ,CsH7kvBA,oCACE,oCAAqC,CACrC,gCAAiC,CAGjC,iBtH8kvBF,CaphvBI,yByG/DJ,oCAQI,mBtH+kvBF,CACF,CsH7kvBE,0CAEE,wBAAyB,CADzB,oDtHglvBJ,CsH5kvBE,2CAEE,oCAAqC,CADrC,gCtH+kvBJ,CsH3kvBE,kDACE,wBtH6kvBJ,CsHzkvBA,wBACE,oCAAqC,CACrC,8CtH4kvBF,CsH1kvBE,0CACE,+CAAgD,CAChD,gCAAiC,CACjC,sBtH4kvBJ,CsH1kvBI,2DACE,+CtH4kvBN,CsHzkvBI,gDAGE,yCAA0C,CxBkB9C,iCAAkC,CA7BlC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CAc9B,6B9FmlvBJ,CsH5kvBI,iDxBgHA,qEANe,CAHjB,8BAA+B,CAD/B,eAAgB,CwBnGZ,iBAAkB,CAClB,StH+kvBN,C8Fj+uBI,+DACE,6GACA,Y9Fm+uBN,CsHjlvBM,6DACE,UAAW,CAEX,WAAY,CAGZ,MAAO,CAFP,iBAAkB,CAGlB,KAAM,CALN,UAAW,CAGX,UtHqlvBR,CsH/kvBI,wDACE,UtHilvBN,CsH3kvBA,wDnBHE,qBAAsB,CmBKtB,eAAgB,CnBHhB,eAAgB,CADhB,cAAe,CmBKf,YtHilvBF,Ca1lvBI,yByGMJ,wDAUI,etH+kvBF,CACF,CuH3pvBA,aAEE,kBvH+pvBF,CuH3pvBE,kBACE,YvH8pvBJ,CuHhpvBA,6DACE,avHypvBF,CuHnpvBE,wCAHE,iCvHiqvBJ,CuH9pvBE,sBACE,aAAc,CAKd,iBAAkB,CADlB,4BAAkB,CzBiFpB,oB9FwkvBF,C8FtkvBE,4BAEE,4BAA6B,CAD7B,yBAA0B,CAxE1B,6BAA8B,CAH9B,iD9FupvBJ,C8FpkvBE,yDANE,iC9F6kvBJ,C8FnkvBE,oCACE,iDC5GoB,CD6GpB,YAAa,CACb,U9FqkvBJ,CuHnqvBI,6BAGE,4BAA6B,CzBgH/B,qEANe,CAHjB,8BAA+B,CAD/B,e9FgkvBF,C8FpjvBI,2CACE,6GACA,Y9FsjvBN,CuHxqvBM,mCACE,iCvH0qvBR,CuHtqvBI,oCACE,qBvHwqvBN,CwH7tvBA,mDAcE,+CAAgD,CAHhD,uBAAyB,CACzB,kCAAmC,CACnC,oBhCmByB,CWxBzB,+FACE,CqBCF,kBAAmB,CANnB,oBAAqB,CAErB,eAAgB,CADhB,eAAiB,CAIjB,uBAAwB,CASxB,iBAAkB,CAflB,qBxH4uvBF,CwH3tvBE,yDACE,mBAAqB,CACrB,gBxH+tvBJ,CwH3tvBA,iBAEE,4CAA6C,CAD7C,qCxH+tvBF,CwH3tvBA,mBAEE,4CAA6C,CAD7C,qCxH+tvBF,CwH3tvBA,eAEE,2CAA4C,CAD5C,oCxH+tvBF,CwH3tvBA,qBACE,exH8tvBF,CwH5tvBE,4BAEE,2BAA4B,CAE5B,+CAAgD,CADhD,yBAA0B,CAF1B,kBxHiuvBJ,CwHztvBE,kCACE,8BAA+B,CAC/B,6CxH4tvBJ,CwHvtvBE,oCACE,8BAA+B,CAC/B,+CxH0tvBJ,CwHrtvBE,uCACE,6BAA8B,CAC9B,kDxHwtvBJ,CyH7xvBA,uBAGE,4CAA6C,CAF7C,YAAa,CACb,qBzHiyvBF,CapuvBI,yB4G/DJ,uBAMI,ezHiyvBF,CACF,CyH/xvBE,qDAGE,gCAAiC,CADjC,6CAA8C,CAD9C,iDAAkD,CAGlD,mBzHiyvBJ,CyH9xvBE,uCAEE,eAAgB,CADhB,kBAAmB,CAEnB,SzHgyvBJ,CyH9xvBI,4CAGE,iCAAkC,CAFlC,aAAc,CACd,gBzHiyvBN,CyH9xvBM,kDAGE,4BAA6B,CAF7B,8BAA+B,CAC/B,oBzHiyvBR,C0H7zvBA,6CAEE,YAAa,CACb,YAAa,CAFb,e1Hk0vBF,C0H9zvBE,qEAGE,uCAAwC,CADxC,cAAgB,CAEhB,eAAgB,CAHhB,c1Hm0vBJ,C0H9zvBI,0FAEE,kBAAmB,CAInB,4CAA6C,CAE7C,4CAA6C,CAD7C,8BAA+B,CAN/B,YAAa,CAEb,SAAW,CACX,aAAc,CACd,wC1Hm0vBN,C0H7zvBI,iFACE,iCAAkC,CAClC,iB1H+zvBN,C0H7zvBM,uFACE,gCAAiC,CACjC,uBAAwB,CACxB,uCAAwC,CACxC,qD1H+zvBR,C0H3zvBI,uFACE,iC1H6zvBN,C0HxzvBI,mGACE,+C1H0zvBN,C0HtzvBE,iEACE,yCAA0C,CAC1C,gC1HwzvBJ,C0HrzvBM,yEACE,iC1HuzvBR,C0HnzvBI,oEACE,wC1HqzvBN,C0HlzvBI,mJACE,2B1HozvBN,C0HjzvBI,uEAGE,yCAA0C,CAD1C,wCAAyC,CADzC,kB1HqzvBN,C2H92vBA,2BAYE,+CAAgD,CAHhD,wBACA,kCAAmC,CACnC,oBAdyB,CxBIzB,+FACE,CwBMF,kBAAmB,CANnB,oBAAqB,CAErB,eAAgB,CADhB,qBAAwB,CAIxB,uB3H83vBF,C2Hp3vBE,mDACE,e3Hu3vBJ,C2Hn3vBE,qEACE,kBAAmB,CACnB,mB3Hs3vBJ,C2Hl3vBE,kEAEE,e3Hs3vBJ,C2Hl3vBE,+DAQE,yCAA0C,CAL1C,qDAAsD,CAFtD,eAAiB,CACjB,8BAAkC,CAElC,iBAAkB,CAOlB,S3Hg3vBJ,C4Hv5vBE,6EACE,UAAW,CAEX,WAAY,CAEZ,MAAO,CAOP,mBAAoB,CARpB,iBAAkB,CAElB,KAAM,CAJN,UAAW,CAKX,U5H25vBJ,C2Hz3vBI,2EAKE,2BAA4B,CAG5B,0CAA2C,CAF3C,yBAA0B,CAF1B,WAAY,CAFZ,UAAY,CAKZ,mBAAoB,CAEpB,SAAU,CARV,iBAAkB,CAElB,U3Hk4vBN,C2Hx3vBI,mEACE,e3H23vBN,C2Hv3vBE,+CACE,uC3H03vBJ,C2Hx3vBI,mFACE,8C3H23vBN,C2Hz3vBM,+FACE,gCAAiC,CACjC,4C3H43vBR,C2Hv3vBE,2CACE,qC3H03vBJ,C2Hx3vBI,+EACE,4C3H23vBN,C2Hz3vBM,2FACE,8BAA+B,CAC/B,0C3H43vBR,C2Hv3vBE,2CACE,qC3H03vBJ,C2Hx3vBI,+EACE,4C3H23vBN,C2Hz3vBM,2FACE,8BAA+B,CAC/B,0C3H43vBR,C2Hv3vBE,yCACE,oC3H03vBJ,C2Hx3vBI,6EACE,2C3H23vBN,C2Hz3vBM,yFACE,6BAA8B,CAC9B,yC3H43vBR,C2Hv3vBE,uCACE,oC3H03vBJ,C2Hx3vBI,2EACE,2C3H23vBN,C2Hz3vBM,uFACE,6BAA8B,CAC9B,wC3H43vBR,C2Hv3vBE,qCACE,qC3H03vBJ,C2Hx3vBI,yEACE,4C3H23vBN,C2Hz3vBM,qFACE,8BAA+B,CAC/B,uC3H43vBR,C2Hv3vBE,mCACE,qC3H03vBJ,C2Hx3vBI,uEACE,4C3H23vBN,C2Hz3vBM,mFACE,8BAA+B,CAC/B,sC3H43vBR,C2Hv3vBE,+CACE,uC3H03vBJ,C2Hx3vBI,mFACE,8C3H23vBN,C2Hz3vBM,+FACE,gCAAiC,CACjC,4C3H43vBR,C2Hv3vBE,qCACE,kC3H03vBJ,C2Hx3vBI,yEACE,yC3H23vBN,C2Hz3vBM,qFACE,2BAA4B,CAC5B,uC3H43vBR,C2Hv3vBE,2CACE,qC3H03vBJ,C2Hx3vBI,+EACE,4C3H23vBN,C2Hz3vBM,2FACE,8BAA+B,CAC/B,0C3H43vBR,C2Hv3vBE,2DACE,uC3H03vBJ,C2Hx3vBI,+FACE,8C3H23vBN,C2Hz3vBM,2GACE,gCAAiC,CACjC,uC3H43vBR,C2Hn3vBE,2CAQE,yBALA,UAAW,CADX,WAAY,CAEZ,iBAAmB,CACnB,YAAa,CAJb,a3H23vBJ,C2Hh3vBI,8HAEE,uC3Hm3vBN,C2Hh3vBI,sHAEE,qC3Hm3vBN,C2Hh3vBI,gHAEE,oC3Hm3vBN,C2Hh3vBI,mKAGE,qC3Hm3vBN,C2Hh3vBI,0GAEE,kC3Hm3vBN,C2H/2vBI,qFACE,aAAc,CACd,c3Hk3vBN,C2Hr2vBA,sDAOE,yCAA0C,CAC1C,oCAAqC,CACrC,oBAtRyB,CxBIzB,+FACE,CwB6QF,YAAa,CACb,qBAAsB,CAItB,oB3H82vBF,C2H12vBE,0GACE,gB3H+2vBJ,C2H32vBE,8DACE,2C3Hg3vBJ,C2H52vBE,8FACE,iB3Hi3vBJ,C2H/2vBI,0GAEE,gB3Hm3vBN,C2H32vBA,cAEE,yCAA0C,CAD1C,wCAAyC,CAEzC,oBArTyB,CAwTzB,iBAAmB,CACnB,S3H+2vBF,C2H72vBE,0BACE,mB3H+2vBJ,C2H52vBE,8BAKE,+CAAgD,CAChD,0CAA2C,CAC3C,qDAAsD,CALtD,eAAgB,CAEhB,oBAAsB,CADtB,iBAAmB,CAFnB,iB3Ho3vBJ,C2H12vBE,+EAEE,e3H42vBJ,C2Hz2vBE,gBACE,iBAAkB,CAClB,kB3H22vBJ,C2Hp2vBA,SACE,YAAa,CACb,qB3H02vBF,C2Hp2vBA,YAEE,eAAgB,CADhB,Y3H22vBF,C6HzswBA,iBACE,wBAAyB,CACzB,mBAAoB,CACpB,e7HitwBF,C6H/swBE,+BAGE,yCAA0C,CAF1C,uBAAwB,CACxB,kB7HktwBJ,C6H5swBI,iCACE,iB7HitwBN,C6H/swBM,wCACE,iB7HitwBR,C6H5swBI,0CACE,gBAAiB,CACjB,eAAiB,CACjB,iB7H8swBN,C6HnswBE,kCACE,kB7HyswBJ,C6HpswBA,KACE,4C7HwswBF,C6HnswBA,0CAEE,iB7HuswBF,C6HxrwBA,kHAIE,gC7HuswBF,C6H7rwBA,UACE,kC7HgswBF,C6H7rwBA,wCAEE,iCAAkC,CAClC,e7HgswBF,C6H5rwBA,2BAEE,wC7H+rwBF,C6H5rwBA,eACE,uC7H+rwBF,C6H5rwBA,uBAIE,wCAAyC,CAFzC,+CAAgD,CADhD,4CAA6C,CAE7C,iB7HgswBF,C6H5rwBA,4BASE,W7HurwBF,C6HrrwBE,2CACE,U7HurwBJ,C6H7qwBA,oEAEE,kB7HkrwBF,C6HhrwBE,uEACE,gB7HkrwBJ,C6H/qwBI,oFACE,Y7HirwBN,C6H7qwBE,kFACE,YAAa,CACb,2B7H+qwBJ,C6H5qwBE,mKAIE,yCAA0C,CAD1C,mBAAqB,CADrB,gB7HgrwBJ,C8Hp0wBA,+DAME,oBHTyB,CGUzB,kBAAmB,CAJnB,YAAa,CACb,qBAAsB,CACtB,W9H60wBF,C8Ht0wBA,0BACE,wCAAyC,CACzC,oB9Hy0wBF,C8Ht0wBE,iDAEE,+CAAgD,CAEhD,cAAe,CACf,0CAA2C,CAJ3C,QAAS,CAET,a9H00wBJ,C8Ht0wBI,8DACE,iB9Hw0wBN,C8Hl0wBE,iDAEE,eAAgB,CADhB,Q9Hq0wBJ,C8Hl0wBI,qDACE,WAAY,CACZ,e9Ho0wBN,C8H5zwBA,aAEE,yCAA0C,CAC1C,wCAAyC,CACzC,oBAAsB,CAHtB,oB9Hq0wBF,C8H/zwBA,OACE,wC9Hk0wBF,C8Hh0wBE,aACE,iC9Hk0wBJ,C8H7zwBA,aACE,oB9Hg0wBF,C+Hr4wBA,8CAIE,aAAc,CACd,gBAAiB,CACjB,iB/Hw4wBF,C+Hp4wBE,oBAGE,iBAAkB,CADlB,iB/Hu4wBJ,C+Hl4wBE,0BACE,kB/Ho4wBJ,C+Hj4wBE,kBAGE,iCAAkC,CAFlC,0CAA2C,CAC3C,0CAA2C,CAE3C,gBAAiB,CACjB,iBAAkB,CAClB,gBAAkB,CAClB,iB/Hm4wBJ,C+Hj4wBI,+BAEE,e/Hk4wBN,C+H/3wBI,oBAEE,oBAAqB,CADrB,gB/Hk4wBN,C+H93wBI,8BAEE,gBAAiB,CACjB,iBAAkB,CAFlB,iB/Hk4wBN,CgIz6wBA,+CACE,WhI46wBF,CgIz6wBA,8CACE,WhI46wBF,CgIx6wBA,qBAEE,eAAgB,CADhB,oBhI46wBF,CgIv6wBA,eACE,mBhI06wBF,CgIx6wBE,0BACE,kBhI06wBJ,CgIv6wBE,uDAEE,ehIy6wBJ,CgIt6wBE,sBACE,wChIw6wBJ,CiIh8wBA,+EAIE,gBjIs8wBF,CkI/8wBA,GAEE,kBAAmB,CACnB,gBAAiB,CAFjB,clIo9wBF,CkI/8wBA,MAEE,yBlIk9wBF,CkIh9wBE,wCACE,oBAAsB,CACtB,iBlIm9wBJ,CmI/9wBA,WAuBE,yCAA0C,CApB1C,yDAA2D,CAC3D,oBRDyB,CQDzB,iCAAkC,CADlC,WAAY,CAIZ,iBnIm+wBF,CmIj+wBE,aACE,gCnIm+wBJ,CmI/9wBE,uBACE,QnIi+wBJ,CmI79wBE,wBACE,enI+9wBJ,C4Hr+wBE,kBACE,UAAW,CAEX,WAAY,CAEZ,MAAO,CAOP,mBAAoB,CARpB,iBAAkB,CAElB,KAAM,CAJN,U5H6+wBJ,CmIj+wBE,aACE,wCnIm+wBJ,CmI/9wBE,kBACE,UnIi+wBJ,CoI9/wBA,cAWE,yCAA0C,CAV1C,sCAAuC,CAGvC,iBAAkB,CAFlB,aAAc,CACd,eAAgB,CAGhB,eAAgB,CADhB,iBAAkB,CAElB,iBpIqgxBF,C4HngxBE,qBACE,UAAW,CAEX,WAAY,CAEZ,MAAO,CAOP,mBAAoB,CARpB,iBAAkB,CAElB,KAAM,CAJN,UAAW,CAKX,U5HsgxBJ,CoIxgxBA,4BAKE,iCAAkC,CAJlC,gCAAiC,CACjC,yBAA0B,CAC1B,cAAgB,CAChB,epI4gxBF,CqI9hxBA,MAEE,gBAAiB,CACjB,iBrImixBF,CqIjixBE,kBACE,crImixBJ,CqIhixBE,iBACE,arIkixBJ,CqI5hxBA,cAEE,gBAAiB,CACjB,iCAAkC,CAFlC,iBrIiixBF,CqIzhxBE,0BACE,erI6hxBJ,CqI1hxBE,4BACE,gBrI6hxBJ,CqI1hxBE,8BACE,iBrI6hxBJ,CqIxhxBA,OAGE,yBAA0B,CAC1B;;GAAA,ClCrBA,oDAAqD,CADrD,4BnGmjxBF,CmG9ixBI,oDAEE,yDnGkjxBN,CmG7ixBI,gBACE,kDAAmD,CACnD,gDnG+ixBN,CmGzixBM,+BACE,wDnG2ixBR,CmGxixBM,8BACE,yDnG0ixBR,CmGvixBM,sBACE,oDnGyixBR,CqI3ixBA,gCAGE,erI4ixBF,CsI/lxBE,2BACE,eAAgB,CAChB,etIqmxBJ,CsIlmxBE,oBACE,ctIomxBJ,CsIjmxBE,sCACE,eAAgB,CAChB,kBtImmxBJ,CsIjmxBI,wCAEE,eAAgB,CADhB,etIomxBN,CsIhmxBI,yCACE,eAAgB,CAChB,0BtIkmxBN,CsI7lxBE,+BACE,etI+lxBJ,CsIvlxBE,oDACE,eAAgB,CAChB,ctI2lxBJ,CuI3nxBA,mBAEE,kBAAmB,CACnB,YAAa,CACb,cAAe,CAGf,evIkoxBF,CuI9nxBA,UACE,mBvIioxBF,CuI7nxBA,SAIE,0BAA2B,CAH3B,QvIioxBF,CuI3nxBE,gCAEE,aAAc,CADd,iBvI8nxBJ,CuIznxBE,uBACE,WAAY,CAEZ,aAAc,CADd,oBvI4nxBJ,CuIvnxBI,yCACE,QvIynxBN,CwI7pxBE,8FAEE,6CAA8C,CAG9C,gBxIsqxBJ,CwIlqxBI,sGACE,gCxIsqxBN,CwIlqxBE,uBASE,YAAa,CACb,qBAAsB,CACtB,QAAU,CATV,eAAgB,CAUhB,eAAgB,CANhB,iBAAkB,CAHlB,cxIwqxBJ,CwI5pxBI,mCACE,kBAAmB,CACnB,SxI8pxBN,CwI3pxBM,sCAGE,kBAAmB,CADnB,YxI6pxBR,CwInpxBA,kBAEE,YAAa,CADb,eAAgB,CAEhB,cxIypxBF,CwItpxBE,uBAEE,YAAa,CACb,axIupxBJ,CwIppxBI,yBAEE,kBAAmB,CADnB,YAAa,CAGb,QAAS,CACT,kBAAmB,CAFnB,gBxIwpxBN,CwIppxBM,kCACE,gCxIspxBR,CwI/oxBI,iEACE,kCxIipxBN,CwI3oxBE,qCACE,YxI6oxBJ,CwIzoxBE,mCACE,gBAAiB,CACjB,gBxI2oxBJ,CwIzoxBI,kEACE,mCxI2oxBN,CwInoxBA,6BAEE,cxIyoxBF,CwIvoxBE,qDACE,exI0oxBJ,CwIvoxBI,mFACE,YAAa,CACb,kBAAmB,CAGnB,gBAAkB,CAFlB,QAAS,CACT,eAAgB,CAEhB,cxI0oxBN,CwItoxBI,yFAEE,iBAAkB,CADlB,YxI0oxBN,CwIvoxBM,6FACE,exI0oxBR,CwIroxBI,2FACE,mBxIwoxBN,CyIzwxBA,oBAGE,iBAAkB,CAClB,kBAAmB,CACnB,eAAgB,CAJhB,kBAAmB,CACnB,mBAAoB,CAIpB,WzI+wxBF,CyI5wxBA,KACE,iEzI+wxBF,C0I3xxBA,6BAGE,kBAAmB,CASnB,yCAA0C,CAD1C,WAAY,CATZ,YAAa,CAEb,sB1ImyxBF,C0IhyxBE,2CACE,4B1IkyxBJ,C0I3xxBI,iDAEE,wCAAyC,CADzC,2B1I8xxBN,C0IxxxBE,mDAEE,yCAA0C,CAD1C,2B1I2xxBJ,C0IvxxBE,mCAEE,S1IwxxBJ,C0IrxxBE,2CACE,8C1IuxxBJ,C0InxxBA,kCAIE,c1ImxxBF,C2I/zxBE,8WAQE,gC3Ik0xBJ,C2I/zxBE,6EAEE,4CAA6C,CAC7C,wCAAyC,CACzC,iBAAkB,CAClB,gCAAiC,CACjC,cAAe,CACf,gB3Ii0xBJ,C4Iz0xBA,kCAGE,sBAAuB,CADvB,WAAY,CAEZ,e5Iq1xBF,C4Il1xBE,6FAEE,oB5Io1xBJ,C4Ij1xBE,gDACE,yC5Im1xBJ,C4I/0xBE,6FAEE,oB5Ii1xBJ,C4I/0xBI,qGACE,Y5Ik1xBN,C6Ij3xBA,sDAEE,mBAAoB,CADpB,+C7Iu3xBF,C8It3xBA,iBACE,uB9I43xBF,C8Ix3xBA,gCAEE,a9I03xBF,C+I5yxBA,MAIM,k+B/I+1xBN,C+I5mxBA,uBAxDY,4BAFA,+BAEA,8BAFA,iCAEA,2BAFA,8BAEA,yBAFA,4BAEA,4BAFA,+BAEA,4BAFA,+BAEA,+CAFA,qDAEA,2BAFA,8BAEA,oWAFA,uCAEA,6JAWR,yCAA0C,CAC1C,iDAAkD,CAClD,uDAAwD,CACxD,qDAAsD,CACtD,kEAAmE,CACnE,2D/IksxBJ,C+I7rxBI,+EAEE,sB/IysxBN,C+IhqxBE,uBAlEU,gEAEA,2BAFA,wHAEA,+CAFA,mFAEA,oWAFA,uCAEA,6JAWR,yCAA0C,CAC1C,iDAAkD,CAClD,uDAAwD,CACxD,qDAAsD,CACtD,kEAAmE,CACnE,2DAA4D,CAmD5D,kB/IqsxBJ,C+InvxBI,+EAEE,sB/I+vxBN,C+IttxBE,sBAlEU,gEAEA,2BAFA,wHAEA,+CAFA,mFAEA,0VAFA,uCAEA,mKAWR,yCAA0C,CAC1C,iDAAkD,CAClD,uDAAwD,CACxD,qDAAsD,CACtD,kEAAmE,CACnE,2DAA4D,CAmD5D,iB/IgwxBJ,C+IzyxBI,+EAEE,sB/IqzxBN,C+I9yxBI,sDACE,mC/IizxBN,C+I1yxBI,kEACE,sBACA,oB/I6yxBN,C+IzyxBI,qCACE,+B/I4yxBN,C+IrxxBE,mBACE,8B/IwxxBJ,C+IzxxBE,qBACE,gC/I4xxBJ,C+I7xxBE,kBACE,6B/IgyxBJ,C+IjyxBE,gBACE,2B/IoyxBJ,C+IryxBE,mBACE,8B/IwyxBJ,C+IzyxBE,mBACE,8B/I4yxBJ,C+I7yxBE,qBACE,gC/IgzxBJ,C+IjzxBE,kBACE,6B/IozxBJ,C+IrzxBE,qBACE,gC/IwzxBJ,C+IzzxBE,sBACE,iC/I4zxBJ,C+I7zxBE,yBACE,oC/Ig0xBJ,C+Ij0xBE,kBACE,6B/Io0xBJ,C+Ir0xBE,kBACE,6B/Iw0xBJ,C+Iz0xBE,wBACE,mC/I40xBJ,C+I70xBE,4BACE,uC/Ig1xBJ,C+Ij1xBE,uBACE,kC/Io1xBJ,C+Ir1xBE,6BACE,wC/Iw1xBJ,C+Iz1xBE,kBACE,6B/I41xBJ,C+I71xBE,iBACE,4B/Ig2xBJ,C+Ij2xBE,2BACE,sC/Io2xBJ,C+Ir2xBE,8BACE,yC/Iw2xBJ,C+Iz2xBE,sBACE,iC/I42xBJ,C+I72xBE,yBACE,oC/Ig3xBJ,C+Ij3xBE,mBACE,8B/Io3xBJ,C+Ir3xBE,sBACE,iC/Iw3xBJ,CgJ9nyBE,uBAzBA,4BAIA,8BAOA,sCAGA,4CACA,sDACA,gEAGA,wCAkBY,8BAKA,mCA1CZ,8BAIA,gCAOA,wCAGA,gDACA,0DACA,oEAGA,0CAkBY,gCAKA,qCA1CZ,4BAIA,8BAOA,sCAGA,4CACA,sDACA,gEAGA,wCAkBY,8BAKA,mCA1CZ,yBAIA,2BAOA,mCAGA,sCACA,gDACA,0DAGA,qCAkBY,2BAKA,gCA1CZ,4BAIA,iCAOA,sCAGA,4CACA,sDACA,gEAGA,2CAkBY,8BAKA,mCA1CZ,2BAIA,6BAOA,qCAGA,0CACA,oDACA,8DAGA,uCAkBY,6BAKA,kCA1CZ,0BAIA,+BAOA,oCAGA,wCACA,kDACA,4DAGA,yCAkBY,4BAKA,iCA1CZ,0BAIA,4BAOA,oCAGA,wCACA,kDACA,4DAGA,sCAkBY,4BAKA,8BA1CZ,yBAIA,2BAOA,mCAGA,sCACA,gDACA,0DAGA,qCAnBA,0BAIA,4BAOA,oCAGA,wCACA,kDACA,4DAGA,sCAnBA,uBAIA,+BAOA,oCAGA,wCACA,kDACA,4DAGA,wChJwvyBF,CgJlvyBE,sBAzBA,4BAIA,iCAOA,sCAGA,4CACA,sDACA,gEAGA,2CAkBY,8BAKA,gCA1CZ,8BAIA,mCAOA,wCAGA,gDACA,0DACA,oEAGA,0CAkBY,gCAKA,kCA1CZ,4BAIA,iCAOA,sCAGA,4CACA,sDACA,gEAGA,2CAkBY,8BAKA,gCA1CZ,yBAIA,8BAOA,mCAGA,sCACA,gDACA,0DAGA,wCAkBY,2BAKA,6BA1CZ,4BAIA,iCAOA,sCAGA,4CACA,sDACA,gEAGA,2CAkBY,8BAKA,gCA1CZ,2BAIA,gCAOA,qCAGA,0CACA,oDACA,8DAGA,0CAkBY,6BAKA,+BA1CZ,0BAIA,+BAOA,oCAGA,wCACA,kDACA,4DAGA,yCAkBY,4BAKA,iCA1CZ,0BAIA,+BAOA,oCAGA,wCACA,kDACA,4DAGA,yCAkBY,4BAKA,8BA1CZ,yBAIA,2BAOA,mCAGA,sCACA,gDACA,0DAGA,qCAnBA,0BAIA,4BAOA,oCAGA,wCACA,kDACA,4DAGA,sCAnBA,uBAIA,+BAOA,oCAGA,wCACA,kDACA,4DAGA,wChJw1yBF,CgJ9yyBE,6CACE,8ChJqzyBJ,CgJ7yyBE,oJ7ClIA,+FnGy7yBF,CgJ3yyBA,qBACE,wChJizyBF,CgJ9yyBE,qCACE,kDAAmD,CACnD,+ChJgzyBJ,CgJ7yyBE,qCAEE,4ChJ+yyBJ,CgJ5yyBE,wEAJE,kDhJmzyBJ,CgJ1yyBE,sDAEE,YhJ2yyBJ,CgJxyyBI,4DAEE,oBAAsB,CADtB,8ChJ2yyBN,CgJtyyBE,yCACE,wChJwyyBJ,CgJ7xyBI,4CAOE,+CAAgD,CALhD,2EAIA,iCAAoC,CALpC,6BAA8B,CAI9B,8BAAiC,CAIjC,8BAA+B,CAD/B,6BhJkyyBN,CgJ9xyBI,kDAGE,2CAA4C,CAF5C,4CAA8C,CAC9C,qBAAuB,CAEvB,iChJgyyBN,CgJ5xyBI,uEACE,wBAAyB,CACzB,gCAAiC,CACjC,8BAA+B,CAC/B,iDhJ8xyBN,CgJzxyBE,8BAIE,yCAA0C,CAF1C,gCAAkC,CAClC,iCAAoC,CAFpC,iCAAkC,CAMlC,gBAAiB,CADjB,wBAA0B,CAD1B,ehJ6xyBJ,CgJnxyBE,4FALI,+ChJkyyBN,CgJ7xyBE,wCACE,6CAA+C,CAC/C,sBAAwB,CACxB,gBAAiB,CACjB,ehJyxyBJ,CgJhxyBA,oBAEE,kBAAoB,C7CnPpB,+FnGygzBF,CgJhxyBE,2CAYE,2CAA4C,CAC5C,mDAAoD,CAVpD,kBAAmB,CAqCnB,0DAA4D,CAvC5D,kBAAoB,CA0CpB,8DAAiE,CAzCjE,YAAa,CAGb,eAAgB,CAEhB,oBAAsB,CADtB,iBAAmB,CAFnB,iBhJyxyBJ,CgJ9wyBI,kEAGE,mDAAoD,CAFpD,QhJixyBN,CgJtwyBQ,yIACE,gDACA,qDhJ4wyBV,CgJzwyBM,8DAEE,+ChJ0wyBR,CgJjxyBQ,6IACE,kDACA,uDhJuxyBV,CgJpxyBM,gEAEE,iDhJqxyBR,CgJ5xyBQ,yIACE,gDACA,qDhJkyyBV,CgJ/xyBM,8DAEE,+ChJgyyBR,CgJvyyBQ,mIACE,6CACA,kDhJ6yyBV,CgJ1yyBM,2DAEE,4ChJ2yyBR,CgJlzyBQ,yIACE,gDACA,qDhJwzyBV,CgJrzyBM,8DAEE,+ChJszyBR,CgJ7zyBQ,uIACE,+CACA,oDhJm0yBV,CgJh0yBM,6DAEE,8ChJi0yBR,CgJx0yBQ,qIACE,8CACA,mDhJ80yBV,CgJ30yBM,4DAEE,6ChJ40yBR,CgJn1yBQ,qIACE,8CACA,mDhJy1yBV,CgJt1yBM,4DAEE,6ChJu1yBR,CgJ91yBQ,mIACE,6CACA,kDhJo2yBV,CgJj2yBM,2DAEE,4ChJk2yBR,CgJz2yBQ,qIACE,8CACA,mDhJ+2yBV,CgJ52yBM,4DAEE,6ChJ62yBR,CgJp3yBQ,qIACE,8CACA,mDhJ03yBV,CgJv3yBM,4DAEE,6ChJw3yBR,C4H9ozBE,kDACE,UAAW,CAEX,WAAY,CAEZ,MAAO,CAOP,mBAAoB,CARpB,iBAAkB,CAElB,KAAM,CAJN,UAAW,CAKX,U5HipzBJ,CgJt3yBI,kEAGE,+CAAgD,CADhD,4CAA8C,CAD9C,8DhJ03yBN,CgJr3yBI,gEAEE,kBAAmB,CACnB,4CAA8C,CAF9C,mBhJy3yBN,CgJr3yBM,oEACE,ShJu3yBR,CgJl3yBI,sHAEE,ShJo3yBN,CgJh3yBI,yDACE,8CjD1Se,CiD2Sf,wBhJk3yBN,CgJx2yBE,aACE,iBAAkB,CAClB,gChJ+2yBJ,CgJ72yBI,mBlD1RF,iCAAkC,CA7BlC,yBAA0B,CAkBxB,6BAA8B,CAf9B,2CAvBuB,CAmCvB,iDAtB8B,CkDiU5B,6BAA8B,ClDnThC,6B9FsqzBJ,CgJ72yBM,2BACE,uDhJ+2yBR,CgJh3yBM,6BACE,yDhJk3yBR,CgJn3yBM,2BACE,uDhJq3yBR,CgJt3yBM,wBACE,oDhJw3yBR,CgJz3yBM,2BACE,uDhJ23yBR,CgJ53yBM,0BACE,sDhJ83yBR,CgJ/3yBM,yBACE,qDhJi4yBR,CgJl4yBM,yBACE,qDhJo4yBR,CgJr4yBM,wBACE,oDhJu4yBR,CgJx4yBM,yBACE,qDhJ04yBR,CgJ34yBM,yBACE,qDhJ64yBR,CgJr4yBM,8EAKE,mDACA,+CACA,+CACA,uBhJo4yBR,CgJ54yBM,kFAKE,qDACA,iDACA,iDACA,uBhJ24yBR,CgJn5yBM,8EAKE,mDACA,+CACA,+CACA,uBhJk5yBR,CgJ15yBM,wEAKE,gDACA,4CACA,4CACA,uBhJy5yBR,CgJj6yBM,8EAKE,mDACA,+CACA,+CACA,uBhJg6yBR,CgJx6yBM,4EAKE,kDACA,8CACA,8CACA,uBhJu6yBR,CgJ/6yBM,0EAKE,iDACA,6CACA,6CACA,uBhJ86yBR,CgJt7yBM,0EAKE,iDACA,6CACA,6CACA,uBhJq7yBR,CgJ77yBM,wEAKE,gDACA,4CACA,4CACA,uBhJ47yBR,CgJp8yBM,0EAKE,iDACA,6CACA,6CACA,uBhJm8yBR,CgJ38yBM,0EAKE,iDACA,6CACA,6CACA,uBhJ08yBR,CiJryzBI,6CACE,ajJ2yzBN,CiJ3zzBI,wFACE,uBAAwB,CACxB,ejJ6zzBN,CiJxzzBI,mEACE,wBAAyB,CACzB,ejJ0zzBN,CiJjyzBI,qCACE,gBjJmyzBN,CiJxxzBM,2EAQE,6ClD/Ba,CkDgCb,sBlDvCW,CkD+BX,UAAW,CAMX,WAAY,CALZ,6BAIA,wBjJ0xzBR,CiJnxzBM,+FACE,2BAA4B,CAC5B,4BjJqxzBR,CiJ7wzBI,2CACE,8CjJ+wzBN,CiJr1zBI,iEACE,uBAAwB,CACxB,ejJu1zBN,CiJl1zBI,+DACE,wBAAyB,CACzB,ejJo1zBN,CiJ9wzBM,wDACE,2BAA4B,CAC5B,4BjJgxzBR,CkJ51zBA,mDAME,elJq2zBF,CkJn2zBE,+DACE,iBlJs2zBJ,CkJ71zBM,2I/CHJ,oDAAqD,CADrD,4BnGu2zBF,CmGl2zBI,4lBAEE,yDnG02zBN,CmGr2zBI,6JACE,kDAAmD,CACnD,gDnGw2zBN,CmGl2zBM,2LACE,wDnGq2zBR,CmGl2zBM,yLACE,yDnGq2zBR,CmGl2zBM,yKACE,oDnGq2zBR,CkJv3zBM,2K/CjBJ,2CAA4C,CAC5C,oBAAsB,CAFtB,oCAAqC,CAGrC,anG64zBF,CkJx3zBM,gEACE,wClJ03zBR,CkJn3zBA,qBACE,kBlJs3zBF,CkJ52zBE,sDAEE,alJ82zBJ,CkJ32zBE,qDAEE,alJ42zBJ,CkJr2zBE,uDAEE,alJu2zBJ,CkJp2zBE,sDAEE,alJq2zBJ,CkJ71zBA,wBACE,cAAe,CACf,elJm2zBF,CkJ91zBE,4C/CvEA,oDAAqD,CADrD,4BnG26zBF,CmGt6zBI,wMAEE,yDnG06zBN,CmGr6zBI,qDACE,kDAAmD,CACnD,gDnGu6zBN,CmGj6zBM,oEACE,wDnGm6zBR,CmGh6zBM,mEACE,yDnGk6zBR,CmG/5zBM,2DACE,oDnGi6zBR,CkJj3zBI,gN/CnFF,2CAA4C,CAC5C,oBAAsB,CAFtB,oCAAqC,CAGrC,anG08zBF,CkJ92zBE,2BACE,YAAa,CACb,qBAAsB,CACtB,uBlJi3zBJ,CkJ92zBE,kDAEE,oBlJg3zBJ,CkJ52zBI,6BACE,iBlJ82zBN,CmJl+zBA,uEACE,eAAgB,CAChB,SnJ8+zBF,CoJh/zBI,uFACE,mCAAoC,CACpC,epJ2/zBN,CoJx/zBI,yDACE,iCpJ0/zBN,CoJt/zBE,+BAEE,eAAgB,CADhB,QpJy/zBJ,CoJt/zBI,kCACE,qBAAsB,CAGtB,gDAAiD,CADjD,aAAc,CADd,cpJ0/zBN,CoJr/zBM,oCACE,epJu/zBR,CoJp/zBM,0FAEE,gCAAiC,CACjC,epJs/zBR,CoJn/zBQ,4GAGE,iCAAkC,CAFlC,WAAY,CACZ,kBpJu/zBV","sources":["webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_type.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/pydata-sphinx-theme.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_banner.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_root.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/vendor/_rfs.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_color-mode.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_reboot.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_variables.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_border-radius.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_lists.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_images.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_image.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_containers.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_container.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_grid.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_grid.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_tables.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_table-variants.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_labels.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-text.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-control.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_transition.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_gradients.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-select.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-check.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_form-range.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_floating-labels.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/forms/_input-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_forms.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_buttons.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_buttons.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_transitions.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_dropdown.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_caret.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_button-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_nav.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_navbar.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_card.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_accordion.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_breadcrumb.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_pagination.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_pagination.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_badge.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_alert.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_progress.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_list-group.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_close.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_toasts.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_modal.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_backdrop.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_tooltip.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_reset-text.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_popover.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_carousel.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_spinners.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_offcanvas.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/_placeholders.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_color-bg.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_colored-links.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_focus-ring.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_icon-link.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_ratio.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_position.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_stacks.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_visually-hidden.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_visually-hidden.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_stretched-link.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_text-truncation.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/helpers/_vr.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/mixins/_utilities.scss","webpack://pydata_sphinx_theme/./node_modules/bootstrap/scss/utilities/_api.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/fontawesome.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_core.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_sizing.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_mixins.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_fixed-width.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_list.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_bordered-pulled.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_animated.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_rotated-flipped.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_stacked.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_variables.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/_icons.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/solid.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/regular.scss","webpack://pydata_sphinx_theme/./node_modules/@fortawesome/fontawesome-free/scss/brands.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_layout.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_fonts.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_icons.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_admonitions.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_versionmodified.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/base/_base.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/abstracts/_links.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_bootstrap.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_skip-link.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_container.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_announcement.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/abstracts/_mixins.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_article.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_footer.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_footer-article.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_footer-content.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_header.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_header-article.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_sidebar-primary.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_sidebar-secondary.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/sections/_sidebar-toggle.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_breadcrumbs.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_icon-links.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/header/_header-logo.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_navbar-links.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_page-toc.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_prev-next.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_search.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_searchbox.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_switcher-theme.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_switcher-version.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_toc-inpage.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_versionmodified.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_indices.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/components/_readthedocs-switcher.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_admonitions.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/abstracts/_color.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_api.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_code.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_figures.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_footnotes.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_hacks.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_lists.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_quotes.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_spans.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_tables.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_toctree.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/content/_math.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_ablog.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_bootstrap.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_copybutton.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_ethical-ads.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_execution.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_graphviz.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_pydata.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/variables/_color.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_sphinx_design.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_togglebutton.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_notebooks.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/extensions/_leaflet.scss","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/styles/pages/_search.scss"],"sourcesContent":["//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text-emphasis: #052c65;\n --bs-secondary-text-emphasis: #2b2f32;\n --bs-success-text-emphasis: #0a3622;\n --bs-info-text-emphasis: #055160;\n --bs-warning-text-emphasis: #664d03;\n --bs-danger-text-emphasis: #58151c;\n --bs-light-text-emphasis: #495057;\n --bs-dark-text-emphasis: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #e2e3e5;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #c4c8cb;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-heading-color: inherit;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-color: #212529;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-xxl: 2rem;\n --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-focus-ring-width: 0.25rem;\n --bs-focus-ring-opacity: 0.25;\n --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n --bs-form-valid-color: #198754;\n --bs-form-valid-border-color: #198754;\n --bs-form-invalid-color: #dc3545;\n --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n color-scheme: dark;\n --bs-body-color: #dee2e6;\n --bs-body-color-rgb: 222, 226, 230;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #fff;\n --bs-emphasis-color-rgb: 255, 255, 255;\n --bs-secondary-color: rgba(222, 226, 230, 0.75);\n --bs-secondary-color-rgb: 222, 226, 230;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n --bs-tertiary-color-rgb: 222, 226, 230;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-primary-text-emphasis: #6ea8fe;\n --bs-secondary-text-emphasis: #a7acb1;\n --bs-success-text-emphasis: #75b798;\n --bs-info-text-emphasis: #6edff6;\n --bs-warning-text-emphasis: #ffda6a;\n --bs-danger-text-emphasis: #ea868f;\n --bs-light-text-emphasis: #f8f9fa;\n --bs-dark-text-emphasis: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #161719;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #41464b;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #087990;\n --bs-warning-border-subtle: #997404;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: inherit;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #8bb9fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 139, 185, 254;\n --bs-code-color: #e685b5;\n --bs-highlight-color: #dee2e6;\n --bs-highlight-bg: #664d03;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n --bs-form-valid-color: #75b798;\n --bs-form-valid-border-color: #75b798;\n --bs-form-invalid-color: #ea868f;\n --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n color: var(--bs-highlight-color);\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n:root {\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color-type: initial;\n --bs-table-bg-type: initial;\n --bs-table-color-state: initial;\n --bs-table-bg-state: initial;\n --bs-table-color: var(--bs-emphasis-color);\n --bs-table-bg: var(--bs-body-bg);\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-emphasis-color);\n --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n --bs-table-active-color: var(--bs-emphasis-color);\n --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n --bs-table-hover-color: var(--bs-emphasis-color);\n --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n width: 100%;\n margin-bottom: 1rem;\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-color-type: var(--bs-table-striped-color);\n --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n --bs-table-color-state: var(--bs-table-active-color);\n --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-color-state: var(--bs-table-hover-color);\n --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #a6b5cc;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #b5b6b7;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #a7b9b1;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #a6c3ca;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #ccc2a4;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #c6acae;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #c6c7c8;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #4d5154;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n appearance: none;\n background-color: var(--bs-body-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-body-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n min-width: 85px;\n height: 1.5em;\n margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n border: 0 !important;\n border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n appearance: none;\n background-color: var(--bs-body-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-body-bg);\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n appearance: none;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n appearance: none;\n background-color: transparent;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n appearance: none;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-secondary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n position: absolute;\n inset: 1rem 0.375rem;\n z-index: -1;\n height: 1.5em;\n content: \"\";\n background-color: var(--bs-body-bg);\n border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n color: rgba(var(--bs-body-color-rgb), 0.65);\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-form-valid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-form-valid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-form-invalid-border-color);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: var(--bs-body-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: var(--bs-border-radius);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked:focus-visible + .btn {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: 0 0 0 #000;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: var(--bs-border-radius);\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: var(--bs-box-shadow);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n background: none;\n border: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: var(--bs-border-radius);\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n --bs-nav-underline-gap: 1rem;\n --bs-nav-underline-border-width: 0.125rem;\n --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n padding-right: 0;\n padding-left: 0;\n border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n font-weight: 700;\n color: var(--bs-nav-underline-link-active-color);\n border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n color: var(--bs-body-color);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type > .accordion-header .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type > .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush > .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush > .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush > .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {\n border-radius: 0;\n}\n.accordion-flush > .accordion-item > .accordion-collapse {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: var(--bs-border-radius);\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: var(--bs-border-radius);\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text-emphasis);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text-emphasis);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text-emphasis);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text-emphasis);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text-emphasis);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text-emphasis);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text-emphasis);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text-emphasis);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text-emphasis);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text-emphasis);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text-emphasis);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n --bs-list-group-active-color: var(--bs-success-bg-subtle);\n --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text-emphasis);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n --bs-list-group-active-color: var(--bs-info-bg-subtle);\n --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text-emphasis);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text-emphasis);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text-emphasis);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n --bs-list-group-active-color: var(--bs-light-bg-subtle);\n --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text-emphasis);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n --bs-list-group-action-active-color: var(--bs-emphasis-color);\n --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: var(--bs-box-shadow);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: calc(-1 * var(--bs-tooltip-arrow-height));\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: var(--bs-box-shadow);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: inherit;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,\n[data-bs-theme=dark].carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n outline: 0;\n box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n display: inline-flex;\n gap: 0.375rem;\n align-items: center;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n text-underline-offset: 0.25em;\n backface-visibility: hidden;\n}\n.icon-link > .bi {\n flex-shrink: 0;\n width: 1em;\n height: 1em;\n fill: currentcolor;\n transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n .icon-link > .bi {\n transition: none;\n }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n position: absolute !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: var(--bs-border-width);\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-inline-grid {\n display: inline-grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.focus-ring-primary {\n --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n --bs-link-underline-opacity: 1;\n text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-inline-grid {\n display: inline-grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-inline-grid {\n display: inline-grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-inline-grid {\n display: inline-grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-inline-grid {\n display: inline-grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-inline-grid {\n display: inline-grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-inline-grid {\n display: inline-grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n.fa {\n font-family: var(--fa-style-family, \"Font Awesome 6 Free\");\n font-weight: var(--fa-style, 900);\n}\n\n.fa,\n.fa-classic,\n.fa-sharp,\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fab,\n.fa-brands {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n display: var(--fa-display, inline-block);\n font-style: normal;\n font-variant: normal;\n line-height: 1;\n text-rendering: auto;\n}\n\n.fas,\n.fa-classic,\n.fa-solid,\n.far,\n.fa-regular {\n font-family: \"Font Awesome 6 Free\";\n}\n\n.fab,\n.fa-brands {\n font-family: \"Font Awesome 6 Brands\";\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(var(--fa-li-width, 2em) * -1);\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n animation-name: fa-beat;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n animation-name: fa-bounce;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n animation-name: fa-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n animation-name: fa-beat-fade;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n animation-name: fa-flip;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n animation-name: fa-shake;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n animation-name: fa-spin;\n animation-delay: var(--fa-animation-delay, 0s);\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 2s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n animation-name: fa-spin;\n animation-direction: var(--fa-animation-direction, normal);\n animation-duration: var(--fa-animation-duration, 1s);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n .fa-bounce,\n .fa-fade,\n .fa-beat-fade,\n .fa-flip,\n .fa-pulse,\n .fa-shake,\n .fa-spin,\n .fa-spin-pulse {\n animation-delay: -1ms;\n animation-duration: 1ms;\n animation-iteration-count: 1;\n transition-delay: 0s;\n transition-duration: 0s;\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n transform: scale(1);\n }\n 45% {\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-bounce {\n 0% {\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-flip {\n 50% {\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-shake {\n 0% {\n transform: rotate(-15deg);\n }\n 4% {\n transform: rotate(15deg);\n }\n 8%, 24% {\n transform: rotate(-18deg);\n }\n 12%, 28% {\n transform: rotate(18deg);\n }\n 16% {\n transform: rotate(-22deg);\n }\n 20% {\n transform: rotate(22deg);\n }\n 32% {\n transform: rotate(-12deg);\n }\n 36% {\n transform: rotate(12deg);\n }\n 40%, 100% {\n transform: rotate(0deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n line-height: 2em;\n position: relative;\n vertical-align: middle;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n left: 0;\n position: absolute;\n text-align: center;\n width: 100%;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.fa-stack-1x {\n line-height: inherit;\n}\n\n.fa-stack-2x {\n font-size: 2em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-0::before {\n content: \"\\30 \";\n}\n\n.fa-1::before {\n content: \"\\31 \";\n}\n\n.fa-2::before {\n content: \"\\32 \";\n}\n\n.fa-3::before {\n content: \"\\33 \";\n}\n\n.fa-4::before {\n content: \"\\34 \";\n}\n\n.fa-5::before {\n content: \"\\35 \";\n}\n\n.fa-6::before {\n content: \"\\36 \";\n}\n\n.fa-7::before {\n content: \"\\37 \";\n}\n\n.fa-8::before {\n content: \"\\38 \";\n}\n\n.fa-9::before {\n content: \"\\39 \";\n}\n\n.fa-fill-drip::before {\n content: \"\\f576\";\n}\n\n.fa-arrows-to-circle::before {\n content: \"\\e4bd\";\n}\n\n.fa-circle-chevron-right::before {\n content: \"\\f138\";\n}\n\n.fa-chevron-circle-right::before {\n content: \"\\f138\";\n}\n\n.fa-at::before {\n content: \"\\@\";\n}\n\n.fa-trash-can::before {\n content: \"\\f2ed\";\n}\n\n.fa-trash-alt::before {\n content: \"\\f2ed\";\n}\n\n.fa-text-height::before {\n content: \"\\f034\";\n}\n\n.fa-user-xmark::before {\n content: \"\\f235\";\n}\n\n.fa-user-times::before {\n content: \"\\f235\";\n}\n\n.fa-stethoscope::before {\n content: \"\\f0f1\";\n}\n\n.fa-message::before {\n content: \"\\f27a\";\n}\n\n.fa-comment-alt::before {\n content: \"\\f27a\";\n}\n\n.fa-info::before {\n content: \"\\f129\";\n}\n\n.fa-down-left-and-up-right-to-center::before {\n content: \"\\f422\";\n}\n\n.fa-compress-alt::before {\n content: \"\\f422\";\n}\n\n.fa-explosion::before {\n content: \"\\e4e9\";\n}\n\n.fa-file-lines::before {\n content: \"\\f15c\";\n}\n\n.fa-file-alt::before {\n content: \"\\f15c\";\n}\n\n.fa-file-text::before {\n content: \"\\f15c\";\n}\n\n.fa-wave-square::before {\n content: \"\\f83e\";\n}\n\n.fa-ring::before {\n content: \"\\f70b\";\n}\n\n.fa-building-un::before {\n content: \"\\e4d9\";\n}\n\n.fa-dice-three::before {\n content: \"\\f527\";\n}\n\n.fa-calendar-days::before {\n content: \"\\f073\";\n}\n\n.fa-calendar-alt::before {\n content: \"\\f073\";\n}\n\n.fa-anchor-circle-check::before {\n content: \"\\e4aa\";\n}\n\n.fa-building-circle-arrow-right::before {\n content: \"\\e4d1\";\n}\n\n.fa-volleyball::before {\n content: \"\\f45f\";\n}\n\n.fa-volleyball-ball::before {\n content: \"\\f45f\";\n}\n\n.fa-arrows-up-to-line::before {\n content: \"\\e4c2\";\n}\n\n.fa-sort-down::before {\n content: \"\\f0dd\";\n}\n\n.fa-sort-desc::before {\n content: \"\\f0dd\";\n}\n\n.fa-circle-minus::before {\n content: \"\\f056\";\n}\n\n.fa-minus-circle::before {\n content: \"\\f056\";\n}\n\n.fa-door-open::before {\n content: \"\\f52b\";\n}\n\n.fa-right-from-bracket::before {\n content: \"\\f2f5\";\n}\n\n.fa-sign-out-alt::before {\n content: \"\\f2f5\";\n}\n\n.fa-atom::before {\n content: \"\\f5d2\";\n}\n\n.fa-soap::before {\n content: \"\\e06e\";\n}\n\n.fa-icons::before {\n content: \"\\f86d\";\n}\n\n.fa-heart-music-camera-bolt::before {\n content: \"\\f86d\";\n}\n\n.fa-microphone-lines-slash::before {\n content: \"\\f539\";\n}\n\n.fa-microphone-alt-slash::before {\n content: \"\\f539\";\n}\n\n.fa-bridge-circle-check::before {\n content: \"\\e4c9\";\n}\n\n.fa-pump-medical::before {\n content: \"\\e06a\";\n}\n\n.fa-fingerprint::before {\n content: \"\\f577\";\n}\n\n.fa-hand-point-right::before {\n content: \"\\f0a4\";\n}\n\n.fa-magnifying-glass-location::before {\n content: \"\\f689\";\n}\n\n.fa-search-location::before {\n content: \"\\f689\";\n}\n\n.fa-forward-step::before {\n content: \"\\f051\";\n}\n\n.fa-step-forward::before {\n content: \"\\f051\";\n}\n\n.fa-face-smile-beam::before {\n content: \"\\f5b8\";\n}\n\n.fa-smile-beam::before {\n content: \"\\f5b8\";\n}\n\n.fa-flag-checkered::before {\n content: \"\\f11e\";\n}\n\n.fa-football::before {\n content: \"\\f44e\";\n}\n\n.fa-football-ball::before {\n content: \"\\f44e\";\n}\n\n.fa-school-circle-exclamation::before {\n content: \"\\e56c\";\n}\n\n.fa-crop::before {\n content: \"\\f125\";\n}\n\n.fa-angles-down::before {\n content: \"\\f103\";\n}\n\n.fa-angle-double-down::before {\n content: \"\\f103\";\n}\n\n.fa-users-rectangle::before {\n content: \"\\e594\";\n}\n\n.fa-people-roof::before {\n content: \"\\e537\";\n}\n\n.fa-people-line::before {\n content: \"\\e534\";\n}\n\n.fa-beer-mug-empty::before {\n content: \"\\f0fc\";\n}\n\n.fa-beer::before {\n content: \"\\f0fc\";\n}\n\n.fa-diagram-predecessor::before {\n content: \"\\e477\";\n}\n\n.fa-arrow-up-long::before {\n content: \"\\f176\";\n}\n\n.fa-long-arrow-up::before {\n content: \"\\f176\";\n}\n\n.fa-fire-flame-simple::before {\n content: \"\\f46a\";\n}\n\n.fa-burn::before {\n content: \"\\f46a\";\n}\n\n.fa-person::before {\n content: \"\\f183\";\n}\n\n.fa-male::before {\n content: \"\\f183\";\n}\n\n.fa-laptop::before {\n content: \"\\f109\";\n}\n\n.fa-file-csv::before {\n content: \"\\f6dd\";\n}\n\n.fa-menorah::before {\n content: \"\\f676\";\n}\n\n.fa-truck-plane::before {\n content: \"\\e58f\";\n}\n\n.fa-record-vinyl::before {\n content: \"\\f8d9\";\n}\n\n.fa-face-grin-stars::before {\n content: \"\\f587\";\n}\n\n.fa-grin-stars::before {\n content: \"\\f587\";\n}\n\n.fa-bong::before {\n content: \"\\f55c\";\n}\n\n.fa-spaghetti-monster-flying::before {\n content: \"\\f67b\";\n}\n\n.fa-pastafarianism::before {\n content: \"\\f67b\";\n}\n\n.fa-arrow-down-up-across-line::before {\n content: \"\\e4af\";\n}\n\n.fa-spoon::before {\n content: \"\\f2e5\";\n}\n\n.fa-utensil-spoon::before {\n content: \"\\f2e5\";\n}\n\n.fa-jar-wheat::before {\n content: \"\\e517\";\n}\n\n.fa-envelopes-bulk::before {\n content: \"\\f674\";\n}\n\n.fa-mail-bulk::before {\n content: \"\\f674\";\n}\n\n.fa-file-circle-exclamation::before {\n content: \"\\e4eb\";\n}\n\n.fa-circle-h::before {\n content: \"\\f47e\";\n}\n\n.fa-hospital-symbol::before {\n content: \"\\f47e\";\n}\n\n.fa-pager::before {\n content: \"\\f815\";\n}\n\n.fa-address-book::before {\n content: \"\\f2b9\";\n}\n\n.fa-contact-book::before {\n content: \"\\f2b9\";\n}\n\n.fa-strikethrough::before {\n content: \"\\f0cc\";\n}\n\n.fa-k::before {\n content: \"K\";\n}\n\n.fa-landmark-flag::before {\n content: \"\\e51c\";\n}\n\n.fa-pencil::before {\n content: \"\\f303\";\n}\n\n.fa-pencil-alt::before {\n content: \"\\f303\";\n}\n\n.fa-backward::before {\n content: \"\\f04a\";\n}\n\n.fa-caret-right::before {\n content: \"\\f0da\";\n}\n\n.fa-comments::before {\n content: \"\\f086\";\n}\n\n.fa-paste::before {\n content: \"\\f0ea\";\n}\n\n.fa-file-clipboard::before {\n content: \"\\f0ea\";\n}\n\n.fa-code-pull-request::before {\n content: \"\\e13c\";\n}\n\n.fa-clipboard-list::before {\n content: \"\\f46d\";\n}\n\n.fa-truck-ramp-box::before {\n content: \"\\f4de\";\n}\n\n.fa-truck-loading::before {\n content: \"\\f4de\";\n}\n\n.fa-user-check::before {\n content: \"\\f4fc\";\n}\n\n.fa-vial-virus::before {\n content: \"\\e597\";\n}\n\n.fa-sheet-plastic::before {\n content: \"\\e571\";\n}\n\n.fa-blog::before {\n content: \"\\f781\";\n}\n\n.fa-user-ninja::before {\n content: \"\\f504\";\n}\n\n.fa-person-arrow-up-from-line::before {\n content: \"\\e539\";\n}\n\n.fa-scroll-torah::before {\n content: \"\\f6a0\";\n}\n\n.fa-torah::before {\n content: \"\\f6a0\";\n}\n\n.fa-broom-ball::before {\n content: \"\\f458\";\n}\n\n.fa-quidditch::before {\n content: \"\\f458\";\n}\n\n.fa-quidditch-broom-ball::before {\n content: \"\\f458\";\n}\n\n.fa-toggle-off::before {\n content: \"\\f204\";\n}\n\n.fa-box-archive::before {\n content: \"\\f187\";\n}\n\n.fa-archive::before {\n content: \"\\f187\";\n}\n\n.fa-person-drowning::before {\n content: \"\\e545\";\n}\n\n.fa-arrow-down-9-1::before {\n content: \"\\f886\";\n}\n\n.fa-sort-numeric-desc::before {\n content: \"\\f886\";\n}\n\n.fa-sort-numeric-down-alt::before {\n content: \"\\f886\";\n}\n\n.fa-face-grin-tongue-squint::before {\n content: \"\\f58a\";\n}\n\n.fa-grin-tongue-squint::before {\n content: \"\\f58a\";\n}\n\n.fa-spray-can::before {\n content: \"\\f5bd\";\n}\n\n.fa-truck-monster::before {\n content: \"\\f63b\";\n}\n\n.fa-w::before {\n content: \"W\";\n}\n\n.fa-earth-africa::before {\n content: \"\\f57c\";\n}\n\n.fa-globe-africa::before {\n content: \"\\f57c\";\n}\n\n.fa-rainbow::before {\n content: \"\\f75b\";\n}\n\n.fa-circle-notch::before {\n content: \"\\f1ce\";\n}\n\n.fa-tablet-screen-button::before {\n content: \"\\f3fa\";\n}\n\n.fa-tablet-alt::before {\n content: \"\\f3fa\";\n}\n\n.fa-paw::before {\n content: \"\\f1b0\";\n}\n\n.fa-cloud::before {\n content: \"\\f0c2\";\n}\n\n.fa-trowel-bricks::before {\n content: \"\\e58a\";\n}\n\n.fa-face-flushed::before {\n content: \"\\f579\";\n}\n\n.fa-flushed::before {\n content: \"\\f579\";\n}\n\n.fa-hospital-user::before {\n content: \"\\f80d\";\n}\n\n.fa-tent-arrow-left-right::before {\n content: \"\\e57f\";\n}\n\n.fa-gavel::before {\n content: \"\\f0e3\";\n}\n\n.fa-legal::before {\n content: \"\\f0e3\";\n}\n\n.fa-binoculars::before {\n content: \"\\f1e5\";\n}\n\n.fa-microphone-slash::before {\n content: \"\\f131\";\n}\n\n.fa-box-tissue::before {\n content: \"\\e05b\";\n}\n\n.fa-motorcycle::before {\n content: \"\\f21c\";\n}\n\n.fa-bell-concierge::before {\n content: \"\\f562\";\n}\n\n.fa-concierge-bell::before {\n content: \"\\f562\";\n}\n\n.fa-pen-ruler::before {\n content: \"\\f5ae\";\n}\n\n.fa-pencil-ruler::before {\n content: \"\\f5ae\";\n}\n\n.fa-people-arrows::before {\n content: \"\\e068\";\n}\n\n.fa-people-arrows-left-right::before {\n content: \"\\e068\";\n}\n\n.fa-mars-and-venus-burst::before {\n content: \"\\e523\";\n}\n\n.fa-square-caret-right::before {\n content: \"\\f152\";\n}\n\n.fa-caret-square-right::before {\n content: \"\\f152\";\n}\n\n.fa-scissors::before {\n content: \"\\f0c4\";\n}\n\n.fa-cut::before {\n content: \"\\f0c4\";\n}\n\n.fa-sun-plant-wilt::before {\n content: \"\\e57a\";\n}\n\n.fa-toilets-portable::before {\n content: \"\\e584\";\n}\n\n.fa-hockey-puck::before {\n content: \"\\f453\";\n}\n\n.fa-table::before {\n content: \"\\f0ce\";\n}\n\n.fa-magnifying-glass-arrow-right::before {\n content: \"\\e521\";\n}\n\n.fa-tachograph-digital::before {\n content: \"\\f566\";\n}\n\n.fa-digital-tachograph::before {\n content: \"\\f566\";\n}\n\n.fa-users-slash::before {\n content: \"\\e073\";\n}\n\n.fa-clover::before {\n content: \"\\e139\";\n}\n\n.fa-reply::before {\n content: \"\\f3e5\";\n}\n\n.fa-mail-reply::before {\n content: \"\\f3e5\";\n}\n\n.fa-star-and-crescent::before {\n content: \"\\f699\";\n}\n\n.fa-house-fire::before {\n content: \"\\e50c\";\n}\n\n.fa-square-minus::before {\n content: \"\\f146\";\n}\n\n.fa-minus-square::before {\n content: \"\\f146\";\n}\n\n.fa-helicopter::before {\n content: \"\\f533\";\n}\n\n.fa-compass::before {\n content: \"\\f14e\";\n}\n\n.fa-square-caret-down::before {\n content: \"\\f150\";\n}\n\n.fa-caret-square-down::before {\n content: \"\\f150\";\n}\n\n.fa-file-circle-question::before {\n content: \"\\e4ef\";\n}\n\n.fa-laptop-code::before {\n content: \"\\f5fc\";\n}\n\n.fa-swatchbook::before {\n content: \"\\f5c3\";\n}\n\n.fa-prescription-bottle::before {\n content: \"\\f485\";\n}\n\n.fa-bars::before {\n content: \"\\f0c9\";\n}\n\n.fa-navicon::before {\n content: \"\\f0c9\";\n}\n\n.fa-people-group::before {\n content: \"\\e533\";\n}\n\n.fa-hourglass-end::before {\n content: \"\\f253\";\n}\n\n.fa-hourglass-3::before {\n content: \"\\f253\";\n}\n\n.fa-heart-crack::before {\n content: \"\\f7a9\";\n}\n\n.fa-heart-broken::before {\n content: \"\\f7a9\";\n}\n\n.fa-square-up-right::before {\n content: \"\\f360\";\n}\n\n.fa-external-link-square-alt::before {\n content: \"\\f360\";\n}\n\n.fa-face-kiss-beam::before {\n content: \"\\f597\";\n}\n\n.fa-kiss-beam::before {\n content: \"\\f597\";\n}\n\n.fa-film::before {\n content: \"\\f008\";\n}\n\n.fa-ruler-horizontal::before {\n content: \"\\f547\";\n}\n\n.fa-people-robbery::before {\n content: \"\\e536\";\n}\n\n.fa-lightbulb::before {\n content: \"\\f0eb\";\n}\n\n.fa-caret-left::before {\n content: \"\\f0d9\";\n}\n\n.fa-circle-exclamation::before {\n content: \"\\f06a\";\n}\n\n.fa-exclamation-circle::before {\n content: \"\\f06a\";\n}\n\n.fa-school-circle-xmark::before {\n content: \"\\e56d\";\n}\n\n.fa-arrow-right-from-bracket::before {\n content: \"\\f08b\";\n}\n\n.fa-sign-out::before {\n content: \"\\f08b\";\n}\n\n.fa-circle-chevron-down::before {\n content: \"\\f13a\";\n}\n\n.fa-chevron-circle-down::before {\n content: \"\\f13a\";\n}\n\n.fa-unlock-keyhole::before {\n content: \"\\f13e\";\n}\n\n.fa-unlock-alt::before {\n content: \"\\f13e\";\n}\n\n.fa-cloud-showers-heavy::before {\n content: \"\\f740\";\n}\n\n.fa-headphones-simple::before {\n content: \"\\f58f\";\n}\n\n.fa-headphones-alt::before {\n content: \"\\f58f\";\n}\n\n.fa-sitemap::before {\n content: \"\\f0e8\";\n}\n\n.fa-circle-dollar-to-slot::before {\n content: \"\\f4b9\";\n}\n\n.fa-donate::before {\n content: \"\\f4b9\";\n}\n\n.fa-memory::before {\n content: \"\\f538\";\n}\n\n.fa-road-spikes::before {\n content: \"\\e568\";\n}\n\n.fa-fire-burner::before {\n content: \"\\e4f1\";\n}\n\n.fa-flag::before {\n content: \"\\f024\";\n}\n\n.fa-hanukiah::before {\n content: \"\\f6e6\";\n}\n\n.fa-feather::before {\n content: \"\\f52d\";\n}\n\n.fa-volume-low::before {\n content: \"\\f027\";\n}\n\n.fa-volume-down::before {\n content: \"\\f027\";\n}\n\n.fa-comment-slash::before {\n content: \"\\f4b3\";\n}\n\n.fa-cloud-sun-rain::before {\n content: \"\\f743\";\n}\n\n.fa-compress::before {\n content: \"\\f066\";\n}\n\n.fa-wheat-awn::before {\n content: \"\\e2cd\";\n}\n\n.fa-wheat-alt::before {\n content: \"\\e2cd\";\n}\n\n.fa-ankh::before {\n content: \"\\f644\";\n}\n\n.fa-hands-holding-child::before {\n content: \"\\e4fa\";\n}\n\n.fa-asterisk::before {\n content: \"\\*\";\n}\n\n.fa-square-check::before {\n content: \"\\f14a\";\n}\n\n.fa-check-square::before {\n content: \"\\f14a\";\n}\n\n.fa-peseta-sign::before {\n content: \"\\e221\";\n}\n\n.fa-heading::before {\n content: \"\\f1dc\";\n}\n\n.fa-header::before {\n content: \"\\f1dc\";\n}\n\n.fa-ghost::before {\n content: \"\\f6e2\";\n}\n\n.fa-list::before {\n content: \"\\f03a\";\n}\n\n.fa-list-squares::before {\n content: \"\\f03a\";\n}\n\n.fa-square-phone-flip::before {\n content: \"\\f87b\";\n}\n\n.fa-phone-square-alt::before {\n content: \"\\f87b\";\n}\n\n.fa-cart-plus::before {\n content: \"\\f217\";\n}\n\n.fa-gamepad::before {\n content: \"\\f11b\";\n}\n\n.fa-circle-dot::before {\n content: \"\\f192\";\n}\n\n.fa-dot-circle::before {\n content: \"\\f192\";\n}\n\n.fa-face-dizzy::before {\n content: \"\\f567\";\n}\n\n.fa-dizzy::before {\n content: \"\\f567\";\n}\n\n.fa-egg::before {\n content: \"\\f7fb\";\n}\n\n.fa-house-medical-circle-xmark::before {\n content: \"\\e513\";\n}\n\n.fa-campground::before {\n content: \"\\f6bb\";\n}\n\n.fa-folder-plus::before {\n content: \"\\f65e\";\n}\n\n.fa-futbol::before {\n content: \"\\f1e3\";\n}\n\n.fa-futbol-ball::before {\n content: \"\\f1e3\";\n}\n\n.fa-soccer-ball::before {\n content: \"\\f1e3\";\n}\n\n.fa-paintbrush::before {\n content: \"\\f1fc\";\n}\n\n.fa-paint-brush::before {\n content: \"\\f1fc\";\n}\n\n.fa-lock::before {\n content: \"\\f023\";\n}\n\n.fa-gas-pump::before {\n content: \"\\f52f\";\n}\n\n.fa-hot-tub-person::before {\n content: \"\\f593\";\n}\n\n.fa-hot-tub::before {\n content: \"\\f593\";\n}\n\n.fa-map-location::before {\n content: \"\\f59f\";\n}\n\n.fa-map-marked::before {\n content: \"\\f59f\";\n}\n\n.fa-house-flood-water::before {\n content: \"\\e50e\";\n}\n\n.fa-tree::before {\n content: \"\\f1bb\";\n}\n\n.fa-bridge-lock::before {\n content: \"\\e4cc\";\n}\n\n.fa-sack-dollar::before {\n content: \"\\f81d\";\n}\n\n.fa-pen-to-square::before {\n content: \"\\f044\";\n}\n\n.fa-edit::before {\n content: \"\\f044\";\n}\n\n.fa-car-side::before {\n content: \"\\f5e4\";\n}\n\n.fa-share-nodes::before {\n content: \"\\f1e0\";\n}\n\n.fa-share-alt::before {\n content: \"\\f1e0\";\n}\n\n.fa-heart-circle-minus::before {\n content: \"\\e4ff\";\n}\n\n.fa-hourglass-half::before {\n content: \"\\f252\";\n}\n\n.fa-hourglass-2::before {\n content: \"\\f252\";\n}\n\n.fa-microscope::before {\n content: \"\\f610\";\n}\n\n.fa-sink::before {\n content: \"\\e06d\";\n}\n\n.fa-bag-shopping::before {\n content: \"\\f290\";\n}\n\n.fa-shopping-bag::before {\n content: \"\\f290\";\n}\n\n.fa-arrow-down-z-a::before {\n content: \"\\f881\";\n}\n\n.fa-sort-alpha-desc::before {\n content: \"\\f881\";\n}\n\n.fa-sort-alpha-down-alt::before {\n content: \"\\f881\";\n}\n\n.fa-mitten::before {\n content: \"\\f7b5\";\n}\n\n.fa-person-rays::before {\n content: \"\\e54d\";\n}\n\n.fa-users::before {\n content: \"\\f0c0\";\n}\n\n.fa-eye-slash::before {\n content: \"\\f070\";\n}\n\n.fa-flask-vial::before {\n content: \"\\e4f3\";\n}\n\n.fa-hand::before {\n content: \"\\f256\";\n}\n\n.fa-hand-paper::before {\n content: \"\\f256\";\n}\n\n.fa-om::before {\n content: \"\\f679\";\n}\n\n.fa-worm::before {\n content: \"\\e599\";\n}\n\n.fa-house-circle-xmark::before {\n content: \"\\e50b\";\n}\n\n.fa-plug::before {\n content: \"\\f1e6\";\n}\n\n.fa-chevron-up::before {\n content: \"\\f077\";\n}\n\n.fa-hand-spock::before {\n content: \"\\f259\";\n}\n\n.fa-stopwatch::before {\n content: \"\\f2f2\";\n}\n\n.fa-face-kiss::before {\n content: \"\\f596\";\n}\n\n.fa-kiss::before {\n content: \"\\f596\";\n}\n\n.fa-bridge-circle-xmark::before {\n content: \"\\e4cb\";\n}\n\n.fa-face-grin-tongue::before {\n content: \"\\f589\";\n}\n\n.fa-grin-tongue::before {\n content: \"\\f589\";\n}\n\n.fa-chess-bishop::before {\n content: \"\\f43a\";\n}\n\n.fa-face-grin-wink::before {\n content: \"\\f58c\";\n}\n\n.fa-grin-wink::before {\n content: \"\\f58c\";\n}\n\n.fa-ear-deaf::before {\n content: \"\\f2a4\";\n}\n\n.fa-deaf::before {\n content: \"\\f2a4\";\n}\n\n.fa-deafness::before {\n content: \"\\f2a4\";\n}\n\n.fa-hard-of-hearing::before {\n content: \"\\f2a4\";\n}\n\n.fa-road-circle-check::before {\n content: \"\\e564\";\n}\n\n.fa-dice-five::before {\n content: \"\\f523\";\n}\n\n.fa-square-rss::before {\n content: \"\\f143\";\n}\n\n.fa-rss-square::before {\n content: \"\\f143\";\n}\n\n.fa-land-mine-on::before {\n content: \"\\e51b\";\n}\n\n.fa-i-cursor::before {\n content: \"\\f246\";\n}\n\n.fa-stamp::before {\n content: \"\\f5bf\";\n}\n\n.fa-stairs::before {\n content: \"\\e289\";\n}\n\n.fa-i::before {\n content: \"I\";\n}\n\n.fa-hryvnia-sign::before {\n content: \"\\f6f2\";\n}\n\n.fa-hryvnia::before {\n content: \"\\f6f2\";\n}\n\n.fa-pills::before {\n content: \"\\f484\";\n}\n\n.fa-face-grin-wide::before {\n content: \"\\f581\";\n}\n\n.fa-grin-alt::before {\n content: \"\\f581\";\n}\n\n.fa-tooth::before {\n content: \"\\f5c9\";\n}\n\n.fa-v::before {\n content: \"V\";\n}\n\n.fa-bangladeshi-taka-sign::before {\n content: \"\\e2e6\";\n}\n\n.fa-bicycle::before {\n content: \"\\f206\";\n}\n\n.fa-staff-snake::before {\n content: \"\\e579\";\n}\n\n.fa-rod-asclepius::before {\n content: \"\\e579\";\n}\n\n.fa-rod-snake::before {\n content: \"\\e579\";\n}\n\n.fa-staff-aesculapius::before {\n content: \"\\e579\";\n}\n\n.fa-head-side-cough-slash::before {\n content: \"\\e062\";\n}\n\n.fa-truck-medical::before {\n content: \"\\f0f9\";\n}\n\n.fa-ambulance::before {\n content: \"\\f0f9\";\n}\n\n.fa-wheat-awn-circle-exclamation::before {\n content: \"\\e598\";\n}\n\n.fa-snowman::before {\n content: \"\\f7d0\";\n}\n\n.fa-mortar-pestle::before {\n content: \"\\f5a7\";\n}\n\n.fa-road-barrier::before {\n content: \"\\e562\";\n}\n\n.fa-school::before {\n content: \"\\f549\";\n}\n\n.fa-igloo::before {\n content: \"\\f7ae\";\n}\n\n.fa-joint::before {\n content: \"\\f595\";\n}\n\n.fa-angle-right::before {\n content: \"\\f105\";\n}\n\n.fa-horse::before {\n content: \"\\f6f0\";\n}\n\n.fa-q::before {\n content: \"Q\";\n}\n\n.fa-g::before {\n content: \"G\";\n}\n\n.fa-notes-medical::before {\n content: \"\\f481\";\n}\n\n.fa-temperature-half::before {\n content: \"\\f2c9\";\n}\n\n.fa-temperature-2::before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-2::before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-half::before {\n content: \"\\f2c9\";\n}\n\n.fa-dong-sign::before {\n content: \"\\e169\";\n}\n\n.fa-capsules::before {\n content: \"\\f46b\";\n}\n\n.fa-poo-storm::before {\n content: \"\\f75a\";\n}\n\n.fa-poo-bolt::before {\n content: \"\\f75a\";\n}\n\n.fa-face-frown-open::before {\n content: \"\\f57a\";\n}\n\n.fa-frown-open::before {\n content: \"\\f57a\";\n}\n\n.fa-hand-point-up::before {\n content: \"\\f0a6\";\n}\n\n.fa-money-bill::before {\n content: \"\\f0d6\";\n}\n\n.fa-bookmark::before {\n content: \"\\f02e\";\n}\n\n.fa-align-justify::before {\n content: \"\\f039\";\n}\n\n.fa-umbrella-beach::before {\n content: \"\\f5ca\";\n}\n\n.fa-helmet-un::before {\n content: \"\\e503\";\n}\n\n.fa-bullseye::before {\n content: \"\\f140\";\n}\n\n.fa-bacon::before {\n content: \"\\f7e5\";\n}\n\n.fa-hand-point-down::before {\n content: \"\\f0a7\";\n}\n\n.fa-arrow-up-from-bracket::before {\n content: \"\\e09a\";\n}\n\n.fa-folder::before {\n content: \"\\f07b\";\n}\n\n.fa-folder-blank::before {\n content: \"\\f07b\";\n}\n\n.fa-file-waveform::before {\n content: \"\\f478\";\n}\n\n.fa-file-medical-alt::before {\n content: \"\\f478\";\n}\n\n.fa-radiation::before {\n content: \"\\f7b9\";\n}\n\n.fa-chart-simple::before {\n content: \"\\e473\";\n}\n\n.fa-mars-stroke::before {\n content: \"\\f229\";\n}\n\n.fa-vial::before {\n content: \"\\f492\";\n}\n\n.fa-gauge::before {\n content: \"\\f624\";\n}\n\n.fa-dashboard::before {\n content: \"\\f624\";\n}\n\n.fa-gauge-med::before {\n content: \"\\f624\";\n}\n\n.fa-tachometer-alt-average::before {\n content: \"\\f624\";\n}\n\n.fa-wand-magic-sparkles::before {\n content: \"\\e2ca\";\n}\n\n.fa-magic-wand-sparkles::before {\n content: \"\\e2ca\";\n}\n\n.fa-e::before {\n content: \"E\";\n}\n\n.fa-pen-clip::before {\n content: \"\\f305\";\n}\n\n.fa-pen-alt::before {\n content: \"\\f305\";\n}\n\n.fa-bridge-circle-exclamation::before {\n content: \"\\e4ca\";\n}\n\n.fa-user::before {\n content: \"\\f007\";\n}\n\n.fa-school-circle-check::before {\n content: \"\\e56b\";\n}\n\n.fa-dumpster::before {\n content: \"\\f793\";\n}\n\n.fa-van-shuttle::before {\n content: \"\\f5b6\";\n}\n\n.fa-shuttle-van::before {\n content: \"\\f5b6\";\n}\n\n.fa-building-user::before {\n content: \"\\e4da\";\n}\n\n.fa-square-caret-left::before {\n content: \"\\f191\";\n}\n\n.fa-caret-square-left::before {\n content: \"\\f191\";\n}\n\n.fa-highlighter::before {\n content: \"\\f591\";\n}\n\n.fa-key::before {\n content: \"\\f084\";\n}\n\n.fa-bullhorn::before {\n content: \"\\f0a1\";\n}\n\n.fa-globe::before {\n content: \"\\f0ac\";\n}\n\n.fa-synagogue::before {\n content: \"\\f69b\";\n}\n\n.fa-person-half-dress::before {\n content: \"\\e548\";\n}\n\n.fa-road-bridge::before {\n content: \"\\e563\";\n}\n\n.fa-location-arrow::before {\n content: \"\\f124\";\n}\n\n.fa-c::before {\n content: \"C\";\n}\n\n.fa-tablet-button::before {\n content: \"\\f10a\";\n}\n\n.fa-building-lock::before {\n content: \"\\e4d6\";\n}\n\n.fa-pizza-slice::before {\n content: \"\\f818\";\n}\n\n.fa-money-bill-wave::before {\n content: \"\\f53a\";\n}\n\n.fa-chart-area::before {\n content: \"\\f1fe\";\n}\n\n.fa-area-chart::before {\n content: \"\\f1fe\";\n}\n\n.fa-house-flag::before {\n content: \"\\e50d\";\n}\n\n.fa-person-circle-minus::before {\n content: \"\\e540\";\n}\n\n.fa-ban::before {\n content: \"\\f05e\";\n}\n\n.fa-cancel::before {\n content: \"\\f05e\";\n}\n\n.fa-camera-rotate::before {\n content: \"\\e0d8\";\n}\n\n.fa-spray-can-sparkles::before {\n content: \"\\f5d0\";\n}\n\n.fa-air-freshener::before {\n content: \"\\f5d0\";\n}\n\n.fa-star::before {\n content: \"\\f005\";\n}\n\n.fa-repeat::before {\n content: \"\\f363\";\n}\n\n.fa-cross::before {\n content: \"\\f654\";\n}\n\n.fa-box::before {\n content: \"\\f466\";\n}\n\n.fa-venus-mars::before {\n content: \"\\f228\";\n}\n\n.fa-arrow-pointer::before {\n content: \"\\f245\";\n}\n\n.fa-mouse-pointer::before {\n content: \"\\f245\";\n}\n\n.fa-maximize::before {\n content: \"\\f31e\";\n}\n\n.fa-expand-arrows-alt::before {\n content: \"\\f31e\";\n}\n\n.fa-charging-station::before {\n content: \"\\f5e7\";\n}\n\n.fa-shapes::before {\n content: \"\\f61f\";\n}\n\n.fa-triangle-circle-square::before {\n content: \"\\f61f\";\n}\n\n.fa-shuffle::before {\n content: \"\\f074\";\n}\n\n.fa-random::before {\n content: \"\\f074\";\n}\n\n.fa-person-running::before {\n content: \"\\f70c\";\n}\n\n.fa-running::before {\n content: \"\\f70c\";\n}\n\n.fa-mobile-retro::before {\n content: \"\\e527\";\n}\n\n.fa-grip-lines-vertical::before {\n content: \"\\f7a5\";\n}\n\n.fa-spider::before {\n content: \"\\f717\";\n}\n\n.fa-hands-bound::before {\n content: \"\\e4f9\";\n}\n\n.fa-file-invoice-dollar::before {\n content: \"\\f571\";\n}\n\n.fa-plane-circle-exclamation::before {\n content: \"\\e556\";\n}\n\n.fa-x-ray::before {\n content: \"\\f497\";\n}\n\n.fa-spell-check::before {\n content: \"\\f891\";\n}\n\n.fa-slash::before {\n content: \"\\f715\";\n}\n\n.fa-computer-mouse::before {\n content: \"\\f8cc\";\n}\n\n.fa-mouse::before {\n content: \"\\f8cc\";\n}\n\n.fa-arrow-right-to-bracket::before {\n content: \"\\f090\";\n}\n\n.fa-sign-in::before {\n content: \"\\f090\";\n}\n\n.fa-shop-slash::before {\n content: \"\\e070\";\n}\n\n.fa-store-alt-slash::before {\n content: \"\\e070\";\n}\n\n.fa-server::before {\n content: \"\\f233\";\n}\n\n.fa-virus-covid-slash::before {\n content: \"\\e4a9\";\n}\n\n.fa-shop-lock::before {\n content: \"\\e4a5\";\n}\n\n.fa-hourglass-start::before {\n content: \"\\f251\";\n}\n\n.fa-hourglass-1::before {\n content: \"\\f251\";\n}\n\n.fa-blender-phone::before {\n content: \"\\f6b6\";\n}\n\n.fa-building-wheat::before {\n content: \"\\e4db\";\n}\n\n.fa-person-breastfeeding::before {\n content: \"\\e53a\";\n}\n\n.fa-right-to-bracket::before {\n content: \"\\f2f6\";\n}\n\n.fa-sign-in-alt::before {\n content: \"\\f2f6\";\n}\n\n.fa-venus::before {\n content: \"\\f221\";\n}\n\n.fa-passport::before {\n content: \"\\f5ab\";\n}\n\n.fa-heart-pulse::before {\n content: \"\\f21e\";\n}\n\n.fa-heartbeat::before {\n content: \"\\f21e\";\n}\n\n.fa-people-carry-box::before {\n content: \"\\f4ce\";\n}\n\n.fa-people-carry::before {\n content: \"\\f4ce\";\n}\n\n.fa-temperature-high::before {\n content: \"\\f769\";\n}\n\n.fa-microchip::before {\n content: \"\\f2db\";\n}\n\n.fa-crown::before {\n content: \"\\f521\";\n}\n\n.fa-weight-hanging::before {\n content: \"\\f5cd\";\n}\n\n.fa-xmarks-lines::before {\n content: \"\\e59a\";\n}\n\n.fa-file-prescription::before {\n content: \"\\f572\";\n}\n\n.fa-weight-scale::before {\n content: \"\\f496\";\n}\n\n.fa-weight::before {\n content: \"\\f496\";\n}\n\n.fa-user-group::before {\n content: \"\\f500\";\n}\n\n.fa-user-friends::before {\n content: \"\\f500\";\n}\n\n.fa-arrow-up-a-z::before {\n content: \"\\f15e\";\n}\n\n.fa-sort-alpha-up::before {\n content: \"\\f15e\";\n}\n\n.fa-chess-knight::before {\n content: \"\\f441\";\n}\n\n.fa-face-laugh-squint::before {\n content: \"\\f59b\";\n}\n\n.fa-laugh-squint::before {\n content: \"\\f59b\";\n}\n\n.fa-wheelchair::before {\n content: \"\\f193\";\n}\n\n.fa-circle-arrow-up::before {\n content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-up::before {\n content: \"\\f0aa\";\n}\n\n.fa-toggle-on::before {\n content: \"\\f205\";\n}\n\n.fa-person-walking::before {\n content: \"\\f554\";\n}\n\n.fa-walking::before {\n content: \"\\f554\";\n}\n\n.fa-l::before {\n content: \"L\";\n}\n\n.fa-fire::before {\n content: \"\\f06d\";\n}\n\n.fa-bed-pulse::before {\n content: \"\\f487\";\n}\n\n.fa-procedures::before {\n content: \"\\f487\";\n}\n\n.fa-shuttle-space::before {\n content: \"\\f197\";\n}\n\n.fa-space-shuttle::before {\n content: \"\\f197\";\n}\n\n.fa-face-laugh::before {\n content: \"\\f599\";\n}\n\n.fa-laugh::before {\n content: \"\\f599\";\n}\n\n.fa-folder-open::before {\n content: \"\\f07c\";\n}\n\n.fa-heart-circle-plus::before {\n content: \"\\e500\";\n}\n\n.fa-code-fork::before {\n content: \"\\e13b\";\n}\n\n.fa-city::before {\n content: \"\\f64f\";\n}\n\n.fa-microphone-lines::before {\n content: \"\\f3c9\";\n}\n\n.fa-microphone-alt::before {\n content: \"\\f3c9\";\n}\n\n.fa-pepper-hot::before {\n content: \"\\f816\";\n}\n\n.fa-unlock::before {\n content: \"\\f09c\";\n}\n\n.fa-colon-sign::before {\n content: \"\\e140\";\n}\n\n.fa-headset::before {\n content: \"\\f590\";\n}\n\n.fa-store-slash::before {\n content: \"\\e071\";\n}\n\n.fa-road-circle-xmark::before {\n content: \"\\e566\";\n}\n\n.fa-user-minus::before {\n content: \"\\f503\";\n}\n\n.fa-mars-stroke-up::before {\n content: \"\\f22a\";\n}\n\n.fa-mars-stroke-v::before {\n content: \"\\f22a\";\n}\n\n.fa-champagne-glasses::before {\n content: \"\\f79f\";\n}\n\n.fa-glass-cheers::before {\n content: \"\\f79f\";\n}\n\n.fa-clipboard::before {\n content: \"\\f328\";\n}\n\n.fa-house-circle-exclamation::before {\n content: \"\\e50a\";\n}\n\n.fa-file-arrow-up::before {\n content: \"\\f574\";\n}\n\n.fa-file-upload::before {\n content: \"\\f574\";\n}\n\n.fa-wifi::before {\n content: \"\\f1eb\";\n}\n\n.fa-wifi-3::before {\n content: \"\\f1eb\";\n}\n\n.fa-wifi-strong::before {\n content: \"\\f1eb\";\n}\n\n.fa-bath::before {\n content: \"\\f2cd\";\n}\n\n.fa-bathtub::before {\n content: \"\\f2cd\";\n}\n\n.fa-underline::before {\n content: \"\\f0cd\";\n}\n\n.fa-user-pen::before {\n content: \"\\f4ff\";\n}\n\n.fa-user-edit::before {\n content: \"\\f4ff\";\n}\n\n.fa-signature::before {\n content: \"\\f5b7\";\n}\n\n.fa-stroopwafel::before {\n content: \"\\f551\";\n}\n\n.fa-bold::before {\n content: \"\\f032\";\n}\n\n.fa-anchor-lock::before {\n content: \"\\e4ad\";\n}\n\n.fa-building-ngo::before {\n content: \"\\e4d7\";\n}\n\n.fa-manat-sign::before {\n content: \"\\e1d5\";\n}\n\n.fa-not-equal::before {\n content: \"\\f53e\";\n}\n\n.fa-border-top-left::before {\n content: \"\\f853\";\n}\n\n.fa-border-style::before {\n content: \"\\f853\";\n}\n\n.fa-map-location-dot::before {\n content: \"\\f5a0\";\n}\n\n.fa-map-marked-alt::before {\n content: \"\\f5a0\";\n}\n\n.fa-jedi::before {\n content: \"\\f669\";\n}\n\n.fa-square-poll-vertical::before {\n content: \"\\f681\";\n}\n\n.fa-poll::before {\n content: \"\\f681\";\n}\n\n.fa-mug-hot::before {\n content: \"\\f7b6\";\n}\n\n.fa-car-battery::before {\n content: \"\\f5df\";\n}\n\n.fa-battery-car::before {\n content: \"\\f5df\";\n}\n\n.fa-gift::before {\n content: \"\\f06b\";\n}\n\n.fa-dice-two::before {\n content: \"\\f528\";\n}\n\n.fa-chess-queen::before {\n content: \"\\f445\";\n}\n\n.fa-glasses::before {\n content: \"\\f530\";\n}\n\n.fa-chess-board::before {\n content: \"\\f43c\";\n}\n\n.fa-building-circle-check::before {\n content: \"\\e4d2\";\n}\n\n.fa-person-chalkboard::before {\n content: \"\\e53d\";\n}\n\n.fa-mars-stroke-right::before {\n content: \"\\f22b\";\n}\n\n.fa-mars-stroke-h::before {\n content: \"\\f22b\";\n}\n\n.fa-hand-back-fist::before {\n content: \"\\f255\";\n}\n\n.fa-hand-rock::before {\n content: \"\\f255\";\n}\n\n.fa-square-caret-up::before {\n content: \"\\f151\";\n}\n\n.fa-caret-square-up::before {\n content: \"\\f151\";\n}\n\n.fa-cloud-showers-water::before {\n content: \"\\e4e4\";\n}\n\n.fa-chart-bar::before {\n content: \"\\f080\";\n}\n\n.fa-bar-chart::before {\n content: \"\\f080\";\n}\n\n.fa-hands-bubbles::before {\n content: \"\\e05e\";\n}\n\n.fa-hands-wash::before {\n content: \"\\e05e\";\n}\n\n.fa-less-than-equal::before {\n content: \"\\f537\";\n}\n\n.fa-train::before {\n content: \"\\f238\";\n}\n\n.fa-eye-low-vision::before {\n content: \"\\f2a8\";\n}\n\n.fa-low-vision::before {\n content: \"\\f2a8\";\n}\n\n.fa-crow::before {\n content: \"\\f520\";\n}\n\n.fa-sailboat::before {\n content: \"\\e445\";\n}\n\n.fa-window-restore::before {\n content: \"\\f2d2\";\n}\n\n.fa-square-plus::before {\n content: \"\\f0fe\";\n}\n\n.fa-plus-square::before {\n content: \"\\f0fe\";\n}\n\n.fa-torii-gate::before {\n content: \"\\f6a1\";\n}\n\n.fa-frog::before {\n content: \"\\f52e\";\n}\n\n.fa-bucket::before {\n content: \"\\e4cf\";\n}\n\n.fa-image::before {\n content: \"\\f03e\";\n}\n\n.fa-microphone::before {\n content: \"\\f130\";\n}\n\n.fa-cow::before {\n content: \"\\f6c8\";\n}\n\n.fa-caret-up::before {\n content: \"\\f0d8\";\n}\n\n.fa-screwdriver::before {\n content: \"\\f54a\";\n}\n\n.fa-folder-closed::before {\n content: \"\\e185\";\n}\n\n.fa-house-tsunami::before {\n content: \"\\e515\";\n}\n\n.fa-square-nfi::before {\n content: \"\\e576\";\n}\n\n.fa-arrow-up-from-ground-water::before {\n content: \"\\e4b5\";\n}\n\n.fa-martini-glass::before {\n content: \"\\f57b\";\n}\n\n.fa-glass-martini-alt::before {\n content: \"\\f57b\";\n}\n\n.fa-rotate-left::before {\n content: \"\\f2ea\";\n}\n\n.fa-rotate-back::before {\n content: \"\\f2ea\";\n}\n\n.fa-rotate-backward::before {\n content: \"\\f2ea\";\n}\n\n.fa-undo-alt::before {\n content: \"\\f2ea\";\n}\n\n.fa-table-columns::before {\n content: \"\\f0db\";\n}\n\n.fa-columns::before {\n content: \"\\f0db\";\n}\n\n.fa-lemon::before {\n content: \"\\f094\";\n}\n\n.fa-head-side-mask::before {\n content: \"\\e063\";\n}\n\n.fa-handshake::before {\n content: \"\\f2b5\";\n}\n\n.fa-gem::before {\n content: \"\\f3a5\";\n}\n\n.fa-dolly::before {\n content: \"\\f472\";\n}\n\n.fa-dolly-box::before {\n content: \"\\f472\";\n}\n\n.fa-smoking::before {\n content: \"\\f48d\";\n}\n\n.fa-minimize::before {\n content: \"\\f78c\";\n}\n\n.fa-compress-arrows-alt::before {\n content: \"\\f78c\";\n}\n\n.fa-monument::before {\n content: \"\\f5a6\";\n}\n\n.fa-snowplow::before {\n content: \"\\f7d2\";\n}\n\n.fa-angles-right::before {\n content: \"\\f101\";\n}\n\n.fa-angle-double-right::before {\n content: \"\\f101\";\n}\n\n.fa-cannabis::before {\n content: \"\\f55f\";\n}\n\n.fa-circle-play::before {\n content: \"\\f144\";\n}\n\n.fa-play-circle::before {\n content: \"\\f144\";\n}\n\n.fa-tablets::before {\n content: \"\\f490\";\n}\n\n.fa-ethernet::before {\n content: \"\\f796\";\n}\n\n.fa-euro-sign::before {\n content: \"\\f153\";\n}\n\n.fa-eur::before {\n content: \"\\f153\";\n}\n\n.fa-euro::before {\n content: \"\\f153\";\n}\n\n.fa-chair::before {\n content: \"\\f6c0\";\n}\n\n.fa-circle-check::before {\n content: \"\\f058\";\n}\n\n.fa-check-circle::before {\n content: \"\\f058\";\n}\n\n.fa-circle-stop::before {\n content: \"\\f28d\";\n}\n\n.fa-stop-circle::before {\n content: \"\\f28d\";\n}\n\n.fa-compass-drafting::before {\n content: \"\\f568\";\n}\n\n.fa-drafting-compass::before {\n content: \"\\f568\";\n}\n\n.fa-plate-wheat::before {\n content: \"\\e55a\";\n}\n\n.fa-icicles::before {\n content: \"\\f7ad\";\n}\n\n.fa-person-shelter::before {\n content: \"\\e54f\";\n}\n\n.fa-neuter::before {\n content: \"\\f22c\";\n}\n\n.fa-id-badge::before {\n content: \"\\f2c1\";\n}\n\n.fa-marker::before {\n content: \"\\f5a1\";\n}\n\n.fa-face-laugh-beam::before {\n content: \"\\f59a\";\n}\n\n.fa-laugh-beam::before {\n content: \"\\f59a\";\n}\n\n.fa-helicopter-symbol::before {\n content: \"\\e502\";\n}\n\n.fa-universal-access::before {\n content: \"\\f29a\";\n}\n\n.fa-circle-chevron-up::before {\n content: \"\\f139\";\n}\n\n.fa-chevron-circle-up::before {\n content: \"\\f139\";\n}\n\n.fa-lari-sign::before {\n content: \"\\e1c8\";\n}\n\n.fa-volcano::before {\n content: \"\\f770\";\n}\n\n.fa-person-walking-dashed-line-arrow-right::before {\n content: \"\\e553\";\n}\n\n.fa-sterling-sign::before {\n content: \"\\f154\";\n}\n\n.fa-gbp::before {\n content: \"\\f154\";\n}\n\n.fa-pound-sign::before {\n content: \"\\f154\";\n}\n\n.fa-viruses::before {\n content: \"\\e076\";\n}\n\n.fa-square-person-confined::before {\n content: \"\\e577\";\n}\n\n.fa-user-tie::before {\n content: \"\\f508\";\n}\n\n.fa-arrow-down-long::before {\n content: \"\\f175\";\n}\n\n.fa-long-arrow-down::before {\n content: \"\\f175\";\n}\n\n.fa-tent-arrow-down-to-line::before {\n content: \"\\e57e\";\n}\n\n.fa-certificate::before {\n content: \"\\f0a3\";\n}\n\n.fa-reply-all::before {\n content: \"\\f122\";\n}\n\n.fa-mail-reply-all::before {\n content: \"\\f122\";\n}\n\n.fa-suitcase::before {\n content: \"\\f0f2\";\n}\n\n.fa-person-skating::before {\n content: \"\\f7c5\";\n}\n\n.fa-skating::before {\n content: \"\\f7c5\";\n}\n\n.fa-filter-circle-dollar::before {\n content: \"\\f662\";\n}\n\n.fa-funnel-dollar::before {\n content: \"\\f662\";\n}\n\n.fa-camera-retro::before {\n content: \"\\f083\";\n}\n\n.fa-circle-arrow-down::before {\n content: \"\\f0ab\";\n}\n\n.fa-arrow-circle-down::before {\n content: \"\\f0ab\";\n}\n\n.fa-file-import::before {\n content: \"\\f56f\";\n}\n\n.fa-arrow-right-to-file::before {\n content: \"\\f56f\";\n}\n\n.fa-square-arrow-up-right::before {\n content: \"\\f14c\";\n}\n\n.fa-external-link-square::before {\n content: \"\\f14c\";\n}\n\n.fa-box-open::before {\n content: \"\\f49e\";\n}\n\n.fa-scroll::before {\n content: \"\\f70e\";\n}\n\n.fa-spa::before {\n content: \"\\f5bb\";\n}\n\n.fa-location-pin-lock::before {\n content: \"\\e51f\";\n}\n\n.fa-pause::before {\n content: \"\\f04c\";\n}\n\n.fa-hill-avalanche::before {\n content: \"\\e507\";\n}\n\n.fa-temperature-empty::before {\n content: \"\\f2cb\";\n}\n\n.fa-temperature-0::before {\n content: \"\\f2cb\";\n}\n\n.fa-thermometer-0::before {\n content: \"\\f2cb\";\n}\n\n.fa-thermometer-empty::before {\n content: \"\\f2cb\";\n}\n\n.fa-bomb::before {\n content: \"\\f1e2\";\n}\n\n.fa-registered::before {\n content: \"\\f25d\";\n}\n\n.fa-address-card::before {\n content: \"\\f2bb\";\n}\n\n.fa-contact-card::before {\n content: \"\\f2bb\";\n}\n\n.fa-vcard::before {\n content: \"\\f2bb\";\n}\n\n.fa-scale-unbalanced-flip::before {\n content: \"\\f516\";\n}\n\n.fa-balance-scale-right::before {\n content: \"\\f516\";\n}\n\n.fa-subscript::before {\n content: \"\\f12c\";\n}\n\n.fa-diamond-turn-right::before {\n content: \"\\f5eb\";\n}\n\n.fa-directions::before {\n content: \"\\f5eb\";\n}\n\n.fa-burst::before {\n content: \"\\e4dc\";\n}\n\n.fa-house-laptop::before {\n content: \"\\e066\";\n}\n\n.fa-laptop-house::before {\n content: \"\\e066\";\n}\n\n.fa-face-tired::before {\n content: \"\\f5c8\";\n}\n\n.fa-tired::before {\n content: \"\\f5c8\";\n}\n\n.fa-money-bills::before {\n content: \"\\e1f3\";\n}\n\n.fa-smog::before {\n content: \"\\f75f\";\n}\n\n.fa-crutch::before {\n content: \"\\f7f7\";\n}\n\n.fa-cloud-arrow-up::before {\n content: \"\\f0ee\";\n}\n\n.fa-cloud-upload::before {\n content: \"\\f0ee\";\n}\n\n.fa-cloud-upload-alt::before {\n content: \"\\f0ee\";\n}\n\n.fa-palette::before {\n content: \"\\f53f\";\n}\n\n.fa-arrows-turn-right::before {\n content: \"\\e4c0\";\n}\n\n.fa-vest::before {\n content: \"\\e085\";\n}\n\n.fa-ferry::before {\n content: \"\\e4ea\";\n}\n\n.fa-arrows-down-to-people::before {\n content: \"\\e4b9\";\n}\n\n.fa-seedling::before {\n content: \"\\f4d8\";\n}\n\n.fa-sprout::before {\n content: \"\\f4d8\";\n}\n\n.fa-left-right::before {\n content: \"\\f337\";\n}\n\n.fa-arrows-alt-h::before {\n content: \"\\f337\";\n}\n\n.fa-boxes-packing::before {\n content: \"\\e4c7\";\n}\n\n.fa-circle-arrow-left::before {\n content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-left::before {\n content: \"\\f0a8\";\n}\n\n.fa-group-arrows-rotate::before {\n content: \"\\e4f6\";\n}\n\n.fa-bowl-food::before {\n content: \"\\e4c6\";\n}\n\n.fa-candy-cane::before {\n content: \"\\f786\";\n}\n\n.fa-arrow-down-wide-short::before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-asc::before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-down::before {\n content: \"\\f160\";\n}\n\n.fa-cloud-bolt::before {\n content: \"\\f76c\";\n}\n\n.fa-thunderstorm::before {\n content: \"\\f76c\";\n}\n\n.fa-text-slash::before {\n content: \"\\f87d\";\n}\n\n.fa-remove-format::before {\n content: \"\\f87d\";\n}\n\n.fa-face-smile-wink::before {\n content: \"\\f4da\";\n}\n\n.fa-smile-wink::before {\n content: \"\\f4da\";\n}\n\n.fa-file-word::before {\n content: \"\\f1c2\";\n}\n\n.fa-file-powerpoint::before {\n content: \"\\f1c4\";\n}\n\n.fa-arrows-left-right::before {\n content: \"\\f07e\";\n}\n\n.fa-arrows-h::before {\n content: \"\\f07e\";\n}\n\n.fa-house-lock::before {\n content: \"\\e510\";\n}\n\n.fa-cloud-arrow-down::before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-download::before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-download-alt::before {\n content: \"\\f0ed\";\n}\n\n.fa-children::before {\n content: \"\\e4e1\";\n}\n\n.fa-chalkboard::before {\n content: \"\\f51b\";\n}\n\n.fa-blackboard::before {\n content: \"\\f51b\";\n}\n\n.fa-user-large-slash::before {\n content: \"\\f4fa\";\n}\n\n.fa-user-alt-slash::before {\n content: \"\\f4fa\";\n}\n\n.fa-envelope-open::before {\n content: \"\\f2b6\";\n}\n\n.fa-handshake-simple-slash::before {\n content: \"\\e05f\";\n}\n\n.fa-handshake-alt-slash::before {\n content: \"\\e05f\";\n}\n\n.fa-mattress-pillow::before {\n content: \"\\e525\";\n}\n\n.fa-guarani-sign::before {\n content: \"\\e19a\";\n}\n\n.fa-arrows-rotate::before {\n content: \"\\f021\";\n}\n\n.fa-refresh::before {\n content: \"\\f021\";\n}\n\n.fa-sync::before {\n content: \"\\f021\";\n}\n\n.fa-fire-extinguisher::before {\n content: \"\\f134\";\n}\n\n.fa-cruzeiro-sign::before {\n content: \"\\e152\";\n}\n\n.fa-greater-than-equal::before {\n content: \"\\f532\";\n}\n\n.fa-shield-halved::before {\n content: \"\\f3ed\";\n}\n\n.fa-shield-alt::before {\n content: \"\\f3ed\";\n}\n\n.fa-book-atlas::before {\n content: \"\\f558\";\n}\n\n.fa-atlas::before {\n content: \"\\f558\";\n}\n\n.fa-virus::before {\n content: \"\\e074\";\n}\n\n.fa-envelope-circle-check::before {\n content: \"\\e4e8\";\n}\n\n.fa-layer-group::before {\n content: \"\\f5fd\";\n}\n\n.fa-arrows-to-dot::before {\n content: \"\\e4be\";\n}\n\n.fa-archway::before {\n content: \"\\f557\";\n}\n\n.fa-heart-circle-check::before {\n content: \"\\e4fd\";\n}\n\n.fa-house-chimney-crack::before {\n content: \"\\f6f1\";\n}\n\n.fa-house-damage::before {\n content: \"\\f6f1\";\n}\n\n.fa-file-zipper::before {\n content: \"\\f1c6\";\n}\n\n.fa-file-archive::before {\n content: \"\\f1c6\";\n}\n\n.fa-square::before {\n content: \"\\f0c8\";\n}\n\n.fa-martini-glass-empty::before {\n content: \"\\f000\";\n}\n\n.fa-glass-martini::before {\n content: \"\\f000\";\n}\n\n.fa-couch::before {\n content: \"\\f4b8\";\n}\n\n.fa-cedi-sign::before {\n content: \"\\e0df\";\n}\n\n.fa-italic::before {\n content: \"\\f033\";\n}\n\n.fa-table-cells-column-lock::before {\n content: \"\\e678\";\n}\n\n.fa-church::before {\n content: \"\\f51d\";\n}\n\n.fa-comments-dollar::before {\n content: \"\\f653\";\n}\n\n.fa-democrat::before {\n content: \"\\f747\";\n}\n\n.fa-z::before {\n content: \"Z\";\n}\n\n.fa-person-skiing::before {\n content: \"\\f7c9\";\n}\n\n.fa-skiing::before {\n content: \"\\f7c9\";\n}\n\n.fa-road-lock::before {\n content: \"\\e567\";\n}\n\n.fa-a::before {\n content: \"A\";\n}\n\n.fa-temperature-arrow-down::before {\n content: \"\\e03f\";\n}\n\n.fa-temperature-down::before {\n content: \"\\e03f\";\n}\n\n.fa-feather-pointed::before {\n content: \"\\f56b\";\n}\n\n.fa-feather-alt::before {\n content: \"\\f56b\";\n}\n\n.fa-p::before {\n content: \"P\";\n}\n\n.fa-snowflake::before {\n content: \"\\f2dc\";\n}\n\n.fa-newspaper::before {\n content: \"\\f1ea\";\n}\n\n.fa-rectangle-ad::before {\n content: \"\\f641\";\n}\n\n.fa-ad::before {\n content: \"\\f641\";\n}\n\n.fa-circle-arrow-right::before {\n content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-right::before {\n content: \"\\f0a9\";\n}\n\n.fa-filter-circle-xmark::before {\n content: \"\\e17b\";\n}\n\n.fa-locust::before {\n content: \"\\e520\";\n}\n\n.fa-sort::before {\n content: \"\\f0dc\";\n}\n\n.fa-unsorted::before {\n content: \"\\f0dc\";\n}\n\n.fa-list-ol::before {\n content: \"\\f0cb\";\n}\n\n.fa-list-1-2::before {\n content: \"\\f0cb\";\n}\n\n.fa-list-numeric::before {\n content: \"\\f0cb\";\n}\n\n.fa-person-dress-burst::before {\n content: \"\\e544\";\n}\n\n.fa-money-check-dollar::before {\n content: \"\\f53d\";\n}\n\n.fa-money-check-alt::before {\n content: \"\\f53d\";\n}\n\n.fa-vector-square::before {\n content: \"\\f5cb\";\n}\n\n.fa-bread-slice::before {\n content: \"\\f7ec\";\n}\n\n.fa-language::before {\n content: \"\\f1ab\";\n}\n\n.fa-face-kiss-wink-heart::before {\n content: \"\\f598\";\n}\n\n.fa-kiss-wink-heart::before {\n content: \"\\f598\";\n}\n\n.fa-filter::before {\n content: \"\\f0b0\";\n}\n\n.fa-question::before {\n content: \"\\?\";\n}\n\n.fa-file-signature::before {\n content: \"\\f573\";\n}\n\n.fa-up-down-left-right::before {\n content: \"\\f0b2\";\n}\n\n.fa-arrows-alt::before {\n content: \"\\f0b2\";\n}\n\n.fa-house-chimney-user::before {\n content: \"\\e065\";\n}\n\n.fa-hand-holding-heart::before {\n content: \"\\f4be\";\n}\n\n.fa-puzzle-piece::before {\n content: \"\\f12e\";\n}\n\n.fa-money-check::before {\n content: \"\\f53c\";\n}\n\n.fa-star-half-stroke::before {\n content: \"\\f5c0\";\n}\n\n.fa-star-half-alt::before {\n content: \"\\f5c0\";\n}\n\n.fa-code::before {\n content: \"\\f121\";\n}\n\n.fa-whiskey-glass::before {\n content: \"\\f7a0\";\n}\n\n.fa-glass-whiskey::before {\n content: \"\\f7a0\";\n}\n\n.fa-building-circle-exclamation::before {\n content: \"\\e4d3\";\n}\n\n.fa-magnifying-glass-chart::before {\n content: \"\\e522\";\n}\n\n.fa-arrow-up-right-from-square::before {\n content: \"\\f08e\";\n}\n\n.fa-external-link::before {\n content: \"\\f08e\";\n}\n\n.fa-cubes-stacked::before {\n content: \"\\e4e6\";\n}\n\n.fa-won-sign::before {\n content: \"\\f159\";\n}\n\n.fa-krw::before {\n content: \"\\f159\";\n}\n\n.fa-won::before {\n content: \"\\f159\";\n}\n\n.fa-virus-covid::before {\n content: \"\\e4a8\";\n}\n\n.fa-austral-sign::before {\n content: \"\\e0a9\";\n}\n\n.fa-f::before {\n content: \"F\";\n}\n\n.fa-leaf::before {\n content: \"\\f06c\";\n}\n\n.fa-road::before {\n content: \"\\f018\";\n}\n\n.fa-taxi::before {\n content: \"\\f1ba\";\n}\n\n.fa-cab::before {\n content: \"\\f1ba\";\n}\n\n.fa-person-circle-plus::before {\n content: \"\\e541\";\n}\n\n.fa-chart-pie::before {\n content: \"\\f200\";\n}\n\n.fa-pie-chart::before {\n content: \"\\f200\";\n}\n\n.fa-bolt-lightning::before {\n content: \"\\e0b7\";\n}\n\n.fa-sack-xmark::before {\n content: \"\\e56a\";\n}\n\n.fa-file-excel::before {\n content: \"\\f1c3\";\n}\n\n.fa-file-contract::before {\n content: \"\\f56c\";\n}\n\n.fa-fish-fins::before {\n content: \"\\e4f2\";\n}\n\n.fa-building-flag::before {\n content: \"\\e4d5\";\n}\n\n.fa-face-grin-beam::before {\n content: \"\\f582\";\n}\n\n.fa-grin-beam::before {\n content: \"\\f582\";\n}\n\n.fa-object-ungroup::before {\n content: \"\\f248\";\n}\n\n.fa-poop::before {\n content: \"\\f619\";\n}\n\n.fa-location-pin::before {\n content: \"\\f041\";\n}\n\n.fa-map-marker::before {\n content: \"\\f041\";\n}\n\n.fa-kaaba::before {\n content: \"\\f66b\";\n}\n\n.fa-toilet-paper::before {\n content: \"\\f71e\";\n}\n\n.fa-helmet-safety::before {\n content: \"\\f807\";\n}\n\n.fa-hard-hat::before {\n content: \"\\f807\";\n}\n\n.fa-hat-hard::before {\n content: \"\\f807\";\n}\n\n.fa-eject::before {\n content: \"\\f052\";\n}\n\n.fa-circle-right::before {\n content: \"\\f35a\";\n}\n\n.fa-arrow-alt-circle-right::before {\n content: \"\\f35a\";\n}\n\n.fa-plane-circle-check::before {\n content: \"\\e555\";\n}\n\n.fa-face-rolling-eyes::before {\n content: \"\\f5a5\";\n}\n\n.fa-meh-rolling-eyes::before {\n content: \"\\f5a5\";\n}\n\n.fa-object-group::before {\n content: \"\\f247\";\n}\n\n.fa-chart-line::before {\n content: \"\\f201\";\n}\n\n.fa-line-chart::before {\n content: \"\\f201\";\n}\n\n.fa-mask-ventilator::before {\n content: \"\\e524\";\n}\n\n.fa-arrow-right::before {\n content: \"\\f061\";\n}\n\n.fa-signs-post::before {\n content: \"\\f277\";\n}\n\n.fa-map-signs::before {\n content: \"\\f277\";\n}\n\n.fa-cash-register::before {\n content: \"\\f788\";\n}\n\n.fa-person-circle-question::before {\n content: \"\\e542\";\n}\n\n.fa-h::before {\n content: \"H\";\n}\n\n.fa-tarp::before {\n content: \"\\e57b\";\n}\n\n.fa-screwdriver-wrench::before {\n content: \"\\f7d9\";\n}\n\n.fa-tools::before {\n content: \"\\f7d9\";\n}\n\n.fa-arrows-to-eye::before {\n content: \"\\e4bf\";\n}\n\n.fa-plug-circle-bolt::before {\n content: \"\\e55b\";\n}\n\n.fa-heart::before {\n content: \"\\f004\";\n}\n\n.fa-mars-and-venus::before {\n content: \"\\f224\";\n}\n\n.fa-house-user::before {\n content: \"\\e1b0\";\n}\n\n.fa-home-user::before {\n content: \"\\e1b0\";\n}\n\n.fa-dumpster-fire::before {\n content: \"\\f794\";\n}\n\n.fa-house-crack::before {\n content: \"\\e3b1\";\n}\n\n.fa-martini-glass-citrus::before {\n content: \"\\f561\";\n}\n\n.fa-cocktail::before {\n content: \"\\f561\";\n}\n\n.fa-face-surprise::before {\n content: \"\\f5c2\";\n}\n\n.fa-surprise::before {\n content: \"\\f5c2\";\n}\n\n.fa-bottle-water::before {\n content: \"\\e4c5\";\n}\n\n.fa-circle-pause::before {\n content: \"\\f28b\";\n}\n\n.fa-pause-circle::before {\n content: \"\\f28b\";\n}\n\n.fa-toilet-paper-slash::before {\n content: \"\\e072\";\n}\n\n.fa-apple-whole::before {\n content: \"\\f5d1\";\n}\n\n.fa-apple-alt::before {\n content: \"\\f5d1\";\n}\n\n.fa-kitchen-set::before {\n content: \"\\e51a\";\n}\n\n.fa-r::before {\n content: \"R\";\n}\n\n.fa-temperature-quarter::before {\n content: \"\\f2ca\";\n}\n\n.fa-temperature-1::before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-1::before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-quarter::before {\n content: \"\\f2ca\";\n}\n\n.fa-cube::before {\n content: \"\\f1b2\";\n}\n\n.fa-bitcoin-sign::before {\n content: \"\\e0b4\";\n}\n\n.fa-shield-dog::before {\n content: \"\\e573\";\n}\n\n.fa-solar-panel::before {\n content: \"\\f5ba\";\n}\n\n.fa-lock-open::before {\n content: \"\\f3c1\";\n}\n\n.fa-elevator::before {\n content: \"\\e16d\";\n}\n\n.fa-money-bill-transfer::before {\n content: \"\\e528\";\n}\n\n.fa-money-bill-trend-up::before {\n content: \"\\e529\";\n}\n\n.fa-house-flood-water-circle-arrow-right::before {\n content: \"\\e50f\";\n}\n\n.fa-square-poll-horizontal::before {\n content: \"\\f682\";\n}\n\n.fa-poll-h::before {\n content: \"\\f682\";\n}\n\n.fa-circle::before {\n content: \"\\f111\";\n}\n\n.fa-backward-fast::before {\n content: \"\\f049\";\n}\n\n.fa-fast-backward::before {\n content: \"\\f049\";\n}\n\n.fa-recycle::before {\n content: \"\\f1b8\";\n}\n\n.fa-user-astronaut::before {\n content: \"\\f4fb\";\n}\n\n.fa-plane-slash::before {\n content: \"\\e069\";\n}\n\n.fa-trademark::before {\n content: \"\\f25c\";\n}\n\n.fa-basketball::before {\n content: \"\\f434\";\n}\n\n.fa-basketball-ball::before {\n content: \"\\f434\";\n}\n\n.fa-satellite-dish::before {\n content: \"\\f7c0\";\n}\n\n.fa-circle-up::before {\n content: \"\\f35b\";\n}\n\n.fa-arrow-alt-circle-up::before {\n content: \"\\f35b\";\n}\n\n.fa-mobile-screen-button::before {\n content: \"\\f3cd\";\n}\n\n.fa-mobile-alt::before {\n content: \"\\f3cd\";\n}\n\n.fa-volume-high::before {\n content: \"\\f028\";\n}\n\n.fa-volume-up::before {\n content: \"\\f028\";\n}\n\n.fa-users-rays::before {\n content: \"\\e593\";\n}\n\n.fa-wallet::before {\n content: \"\\f555\";\n}\n\n.fa-clipboard-check::before {\n content: \"\\f46c\";\n}\n\n.fa-file-audio::before {\n content: \"\\f1c7\";\n}\n\n.fa-burger::before {\n content: \"\\f805\";\n}\n\n.fa-hamburger::before {\n content: \"\\f805\";\n}\n\n.fa-wrench::before {\n content: \"\\f0ad\";\n}\n\n.fa-bugs::before {\n content: \"\\e4d0\";\n}\n\n.fa-rupee-sign::before {\n content: \"\\f156\";\n}\n\n.fa-rupee::before {\n content: \"\\f156\";\n}\n\n.fa-file-image::before {\n content: \"\\f1c5\";\n}\n\n.fa-circle-question::before {\n content: \"\\f059\";\n}\n\n.fa-question-circle::before {\n content: \"\\f059\";\n}\n\n.fa-plane-departure::before {\n content: \"\\f5b0\";\n}\n\n.fa-handshake-slash::before {\n content: \"\\e060\";\n}\n\n.fa-book-bookmark::before {\n content: \"\\e0bb\";\n}\n\n.fa-code-branch::before {\n content: \"\\f126\";\n}\n\n.fa-hat-cowboy::before {\n content: \"\\f8c0\";\n}\n\n.fa-bridge::before {\n content: \"\\e4c8\";\n}\n\n.fa-phone-flip::before {\n content: \"\\f879\";\n}\n\n.fa-phone-alt::before {\n content: \"\\f879\";\n}\n\n.fa-truck-front::before {\n content: \"\\e2b7\";\n}\n\n.fa-cat::before {\n content: \"\\f6be\";\n}\n\n.fa-anchor-circle-exclamation::before {\n content: \"\\e4ab\";\n}\n\n.fa-truck-field::before {\n content: \"\\e58d\";\n}\n\n.fa-route::before {\n content: \"\\f4d7\";\n}\n\n.fa-clipboard-question::before {\n content: \"\\e4e3\";\n}\n\n.fa-panorama::before {\n content: \"\\e209\";\n}\n\n.fa-comment-medical::before {\n content: \"\\f7f5\";\n}\n\n.fa-teeth-open::before {\n content: \"\\f62f\";\n}\n\n.fa-file-circle-minus::before {\n content: \"\\e4ed\";\n}\n\n.fa-tags::before {\n content: \"\\f02c\";\n}\n\n.fa-wine-glass::before {\n content: \"\\f4e3\";\n}\n\n.fa-forward-fast::before {\n content: \"\\f050\";\n}\n\n.fa-fast-forward::before {\n content: \"\\f050\";\n}\n\n.fa-face-meh-blank::before {\n content: \"\\f5a4\";\n}\n\n.fa-meh-blank::before {\n content: \"\\f5a4\";\n}\n\n.fa-square-parking::before {\n content: \"\\f540\";\n}\n\n.fa-parking::before {\n content: \"\\f540\";\n}\n\n.fa-house-signal::before {\n content: \"\\e012\";\n}\n\n.fa-bars-progress::before {\n content: \"\\f828\";\n}\n\n.fa-tasks-alt::before {\n content: \"\\f828\";\n}\n\n.fa-faucet-drip::before {\n content: \"\\e006\";\n}\n\n.fa-cart-flatbed::before {\n content: \"\\f474\";\n}\n\n.fa-dolly-flatbed::before {\n content: \"\\f474\";\n}\n\n.fa-ban-smoking::before {\n content: \"\\f54d\";\n}\n\n.fa-smoking-ban::before {\n content: \"\\f54d\";\n}\n\n.fa-terminal::before {\n content: \"\\f120\";\n}\n\n.fa-mobile-button::before {\n content: \"\\f10b\";\n}\n\n.fa-house-medical-flag::before {\n content: \"\\e514\";\n}\n\n.fa-basket-shopping::before {\n content: \"\\f291\";\n}\n\n.fa-shopping-basket::before {\n content: \"\\f291\";\n}\n\n.fa-tape::before {\n content: \"\\f4db\";\n}\n\n.fa-bus-simple::before {\n content: \"\\f55e\";\n}\n\n.fa-bus-alt::before {\n content: \"\\f55e\";\n}\n\n.fa-eye::before {\n content: \"\\f06e\";\n}\n\n.fa-face-sad-cry::before {\n content: \"\\f5b3\";\n}\n\n.fa-sad-cry::before {\n content: \"\\f5b3\";\n}\n\n.fa-audio-description::before {\n content: \"\\f29e\";\n}\n\n.fa-person-military-to-person::before {\n content: \"\\e54c\";\n}\n\n.fa-file-shield::before {\n content: \"\\e4f0\";\n}\n\n.fa-user-slash::before {\n content: \"\\f506\";\n}\n\n.fa-pen::before {\n content: \"\\f304\";\n}\n\n.fa-tower-observation::before {\n content: \"\\e586\";\n}\n\n.fa-file-code::before {\n content: \"\\f1c9\";\n}\n\n.fa-signal::before {\n content: \"\\f012\";\n}\n\n.fa-signal-5::before {\n content: \"\\f012\";\n}\n\n.fa-signal-perfect::before {\n content: \"\\f012\";\n}\n\n.fa-bus::before {\n content: \"\\f207\";\n}\n\n.fa-heart-circle-xmark::before {\n content: \"\\e501\";\n}\n\n.fa-house-chimney::before {\n content: \"\\e3af\";\n}\n\n.fa-home-lg::before {\n content: \"\\e3af\";\n}\n\n.fa-window-maximize::before {\n content: \"\\f2d0\";\n}\n\n.fa-face-frown::before {\n content: \"\\f119\";\n}\n\n.fa-frown::before {\n content: \"\\f119\";\n}\n\n.fa-prescription::before {\n content: \"\\f5b1\";\n}\n\n.fa-shop::before {\n content: \"\\f54f\";\n}\n\n.fa-store-alt::before {\n content: \"\\f54f\";\n}\n\n.fa-floppy-disk::before {\n content: \"\\f0c7\";\n}\n\n.fa-save::before {\n content: \"\\f0c7\";\n}\n\n.fa-vihara::before {\n content: \"\\f6a7\";\n}\n\n.fa-scale-unbalanced::before {\n content: \"\\f515\";\n}\n\n.fa-balance-scale-left::before {\n content: \"\\f515\";\n}\n\n.fa-sort-up::before {\n content: \"\\f0de\";\n}\n\n.fa-sort-asc::before {\n content: \"\\f0de\";\n}\n\n.fa-comment-dots::before {\n content: \"\\f4ad\";\n}\n\n.fa-commenting::before {\n content: \"\\f4ad\";\n}\n\n.fa-plant-wilt::before {\n content: \"\\e5aa\";\n}\n\n.fa-diamond::before {\n content: \"\\f219\";\n}\n\n.fa-face-grin-squint::before {\n content: \"\\f585\";\n}\n\n.fa-grin-squint::before {\n content: \"\\f585\";\n}\n\n.fa-hand-holding-dollar::before {\n content: \"\\f4c0\";\n}\n\n.fa-hand-holding-usd::before {\n content: \"\\f4c0\";\n}\n\n.fa-bacterium::before {\n content: \"\\e05a\";\n}\n\n.fa-hand-pointer::before {\n content: \"\\f25a\";\n}\n\n.fa-drum-steelpan::before {\n content: \"\\f56a\";\n}\n\n.fa-hand-scissors::before {\n content: \"\\f257\";\n}\n\n.fa-hands-praying::before {\n content: \"\\f684\";\n}\n\n.fa-praying-hands::before {\n content: \"\\f684\";\n}\n\n.fa-arrow-rotate-right::before {\n content: \"\\f01e\";\n}\n\n.fa-arrow-right-rotate::before {\n content: \"\\f01e\";\n}\n\n.fa-arrow-rotate-forward::before {\n content: \"\\f01e\";\n}\n\n.fa-redo::before {\n content: \"\\f01e\";\n}\n\n.fa-biohazard::before {\n content: \"\\f780\";\n}\n\n.fa-location-crosshairs::before {\n content: \"\\f601\";\n}\n\n.fa-location::before {\n content: \"\\f601\";\n}\n\n.fa-mars-double::before {\n content: \"\\f227\";\n}\n\n.fa-child-dress::before {\n content: \"\\e59c\";\n}\n\n.fa-users-between-lines::before {\n content: \"\\e591\";\n}\n\n.fa-lungs-virus::before {\n content: \"\\e067\";\n}\n\n.fa-face-grin-tears::before {\n content: \"\\f588\";\n}\n\n.fa-grin-tears::before {\n content: \"\\f588\";\n}\n\n.fa-phone::before {\n content: \"\\f095\";\n}\n\n.fa-calendar-xmark::before {\n content: \"\\f273\";\n}\n\n.fa-calendar-times::before {\n content: \"\\f273\";\n}\n\n.fa-child-reaching::before {\n content: \"\\e59d\";\n}\n\n.fa-head-side-virus::before {\n content: \"\\e064\";\n}\n\n.fa-user-gear::before {\n content: \"\\f4fe\";\n}\n\n.fa-user-cog::before {\n content: \"\\f4fe\";\n}\n\n.fa-arrow-up-1-9::before {\n content: \"\\f163\";\n}\n\n.fa-sort-numeric-up::before {\n content: \"\\f163\";\n}\n\n.fa-door-closed::before {\n content: \"\\f52a\";\n}\n\n.fa-shield-virus::before {\n content: \"\\e06c\";\n}\n\n.fa-dice-six::before {\n content: \"\\f526\";\n}\n\n.fa-mosquito-net::before {\n content: \"\\e52c\";\n}\n\n.fa-bridge-water::before {\n content: \"\\e4ce\";\n}\n\n.fa-person-booth::before {\n content: \"\\f756\";\n}\n\n.fa-text-width::before {\n content: \"\\f035\";\n}\n\n.fa-hat-wizard::before {\n content: \"\\f6e8\";\n}\n\n.fa-pen-fancy::before {\n content: \"\\f5ac\";\n}\n\n.fa-person-digging::before {\n content: \"\\f85e\";\n}\n\n.fa-digging::before {\n content: \"\\f85e\";\n}\n\n.fa-trash::before {\n content: \"\\f1f8\";\n}\n\n.fa-gauge-simple::before {\n content: \"\\f629\";\n}\n\n.fa-gauge-simple-med::before {\n content: \"\\f629\";\n}\n\n.fa-tachometer-average::before {\n content: \"\\f629\";\n}\n\n.fa-book-medical::before {\n content: \"\\f7e6\";\n}\n\n.fa-poo::before {\n content: \"\\f2fe\";\n}\n\n.fa-quote-right::before {\n content: \"\\f10e\";\n}\n\n.fa-quote-right-alt::before {\n content: \"\\f10e\";\n}\n\n.fa-shirt::before {\n content: \"\\f553\";\n}\n\n.fa-t-shirt::before {\n content: \"\\f553\";\n}\n\n.fa-tshirt::before {\n content: \"\\f553\";\n}\n\n.fa-cubes::before {\n content: \"\\f1b3\";\n}\n\n.fa-divide::before {\n content: \"\\f529\";\n}\n\n.fa-tenge-sign::before {\n content: \"\\f7d7\";\n}\n\n.fa-tenge::before {\n content: \"\\f7d7\";\n}\n\n.fa-headphones::before {\n content: \"\\f025\";\n}\n\n.fa-hands-holding::before {\n content: \"\\f4c2\";\n}\n\n.fa-hands-clapping::before {\n content: \"\\e1a8\";\n}\n\n.fa-republican::before {\n content: \"\\f75e\";\n}\n\n.fa-arrow-left::before {\n content: \"\\f060\";\n}\n\n.fa-person-circle-xmark::before {\n content: \"\\e543\";\n}\n\n.fa-ruler::before {\n content: \"\\f545\";\n}\n\n.fa-align-left::before {\n content: \"\\f036\";\n}\n\n.fa-dice-d6::before {\n content: \"\\f6d1\";\n}\n\n.fa-restroom::before {\n content: \"\\f7bd\";\n}\n\n.fa-j::before {\n content: \"J\";\n}\n\n.fa-users-viewfinder::before {\n content: \"\\e595\";\n}\n\n.fa-file-video::before {\n content: \"\\f1c8\";\n}\n\n.fa-up-right-from-square::before {\n content: \"\\f35d\";\n}\n\n.fa-external-link-alt::before {\n content: \"\\f35d\";\n}\n\n.fa-table-cells::before {\n content: \"\\f00a\";\n}\n\n.fa-th::before {\n content: \"\\f00a\";\n}\n\n.fa-file-pdf::before {\n content: \"\\f1c1\";\n}\n\n.fa-book-bible::before {\n content: \"\\f647\";\n}\n\n.fa-bible::before {\n content: \"\\f647\";\n}\n\n.fa-o::before {\n content: \"O\";\n}\n\n.fa-suitcase-medical::before {\n content: \"\\f0fa\";\n}\n\n.fa-medkit::before {\n content: \"\\f0fa\";\n}\n\n.fa-user-secret::before {\n content: \"\\f21b\";\n}\n\n.fa-otter::before {\n content: \"\\f700\";\n}\n\n.fa-person-dress::before {\n content: \"\\f182\";\n}\n\n.fa-female::before {\n content: \"\\f182\";\n}\n\n.fa-comment-dollar::before {\n content: \"\\f651\";\n}\n\n.fa-business-time::before {\n content: \"\\f64a\";\n}\n\n.fa-briefcase-clock::before {\n content: \"\\f64a\";\n}\n\n.fa-table-cells-large::before {\n content: \"\\f009\";\n}\n\n.fa-th-large::before {\n content: \"\\f009\";\n}\n\n.fa-book-tanakh::before {\n content: \"\\f827\";\n}\n\n.fa-tanakh::before {\n content: \"\\f827\";\n}\n\n.fa-phone-volume::before {\n content: \"\\f2a0\";\n}\n\n.fa-volume-control-phone::before {\n content: \"\\f2a0\";\n}\n\n.fa-hat-cowboy-side::before {\n content: \"\\f8c1\";\n}\n\n.fa-clipboard-user::before {\n content: \"\\f7f3\";\n}\n\n.fa-child::before {\n content: \"\\f1ae\";\n}\n\n.fa-lira-sign::before {\n content: \"\\f195\";\n}\n\n.fa-satellite::before {\n content: \"\\f7bf\";\n}\n\n.fa-plane-lock::before {\n content: \"\\e558\";\n}\n\n.fa-tag::before {\n content: \"\\f02b\";\n}\n\n.fa-comment::before {\n content: \"\\f075\";\n}\n\n.fa-cake-candles::before {\n content: \"\\f1fd\";\n}\n\n.fa-birthday-cake::before {\n content: \"\\f1fd\";\n}\n\n.fa-cake::before {\n content: \"\\f1fd\";\n}\n\n.fa-envelope::before {\n content: \"\\f0e0\";\n}\n\n.fa-angles-up::before {\n content: \"\\f102\";\n}\n\n.fa-angle-double-up::before {\n content: \"\\f102\";\n}\n\n.fa-paperclip::before {\n content: \"\\f0c6\";\n}\n\n.fa-arrow-right-to-city::before {\n content: \"\\e4b3\";\n}\n\n.fa-ribbon::before {\n content: \"\\f4d6\";\n}\n\n.fa-lungs::before {\n content: \"\\f604\";\n}\n\n.fa-arrow-up-9-1::before {\n content: \"\\f887\";\n}\n\n.fa-sort-numeric-up-alt::before {\n content: \"\\f887\";\n}\n\n.fa-litecoin-sign::before {\n content: \"\\e1d3\";\n}\n\n.fa-border-none::before {\n content: \"\\f850\";\n}\n\n.fa-circle-nodes::before {\n content: \"\\e4e2\";\n}\n\n.fa-parachute-box::before {\n content: \"\\f4cd\";\n}\n\n.fa-indent::before {\n content: \"\\f03c\";\n}\n\n.fa-truck-field-un::before {\n content: \"\\e58e\";\n}\n\n.fa-hourglass::before {\n content: \"\\f254\";\n}\n\n.fa-hourglass-empty::before {\n content: \"\\f254\";\n}\n\n.fa-mountain::before {\n content: \"\\f6fc\";\n}\n\n.fa-user-doctor::before {\n content: \"\\f0f0\";\n}\n\n.fa-user-md::before {\n content: \"\\f0f0\";\n}\n\n.fa-circle-info::before {\n content: \"\\f05a\";\n}\n\n.fa-info-circle::before {\n content: \"\\f05a\";\n}\n\n.fa-cloud-meatball::before {\n content: \"\\f73b\";\n}\n\n.fa-camera::before {\n content: \"\\f030\";\n}\n\n.fa-camera-alt::before {\n content: \"\\f030\";\n}\n\n.fa-square-virus::before {\n content: \"\\e578\";\n}\n\n.fa-meteor::before {\n content: \"\\f753\";\n}\n\n.fa-car-on::before {\n content: \"\\e4dd\";\n}\n\n.fa-sleigh::before {\n content: \"\\f7cc\";\n}\n\n.fa-arrow-down-1-9::before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-asc::before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-down::before {\n content: \"\\f162\";\n}\n\n.fa-hand-holding-droplet::before {\n content: \"\\f4c1\";\n}\n\n.fa-hand-holding-water::before {\n content: \"\\f4c1\";\n}\n\n.fa-water::before {\n content: \"\\f773\";\n}\n\n.fa-calendar-check::before {\n content: \"\\f274\";\n}\n\n.fa-braille::before {\n content: \"\\f2a1\";\n}\n\n.fa-prescription-bottle-medical::before {\n content: \"\\f486\";\n}\n\n.fa-prescription-bottle-alt::before {\n content: \"\\f486\";\n}\n\n.fa-landmark::before {\n content: \"\\f66f\";\n}\n\n.fa-truck::before {\n content: \"\\f0d1\";\n}\n\n.fa-crosshairs::before {\n content: \"\\f05b\";\n}\n\n.fa-person-cane::before {\n content: \"\\e53c\";\n}\n\n.fa-tent::before {\n content: \"\\e57d\";\n}\n\n.fa-vest-patches::before {\n content: \"\\e086\";\n}\n\n.fa-check-double::before {\n content: \"\\f560\";\n}\n\n.fa-arrow-down-a-z::before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-asc::before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-down::before {\n content: \"\\f15d\";\n}\n\n.fa-money-bill-wheat::before {\n content: \"\\e52a\";\n}\n\n.fa-cookie::before {\n content: \"\\f563\";\n}\n\n.fa-arrow-rotate-left::before {\n content: \"\\f0e2\";\n}\n\n.fa-arrow-left-rotate::before {\n content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-back::before {\n content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-backward::before {\n content: \"\\f0e2\";\n}\n\n.fa-undo::before {\n content: \"\\f0e2\";\n}\n\n.fa-hard-drive::before {\n content: \"\\f0a0\";\n}\n\n.fa-hdd::before {\n content: \"\\f0a0\";\n}\n\n.fa-face-grin-squint-tears::before {\n content: \"\\f586\";\n}\n\n.fa-grin-squint-tears::before {\n content: \"\\f586\";\n}\n\n.fa-dumbbell::before {\n content: \"\\f44b\";\n}\n\n.fa-rectangle-list::before {\n content: \"\\f022\";\n}\n\n.fa-list-alt::before {\n content: \"\\f022\";\n}\n\n.fa-tarp-droplet::before {\n content: \"\\e57c\";\n}\n\n.fa-house-medical-circle-check::before {\n content: \"\\e511\";\n}\n\n.fa-person-skiing-nordic::before {\n content: \"\\f7ca\";\n}\n\n.fa-skiing-nordic::before {\n content: \"\\f7ca\";\n}\n\n.fa-calendar-plus::before {\n content: \"\\f271\";\n}\n\n.fa-plane-arrival::before {\n content: \"\\f5af\";\n}\n\n.fa-circle-left::before {\n content: \"\\f359\";\n}\n\n.fa-arrow-alt-circle-left::before {\n content: \"\\f359\";\n}\n\n.fa-train-subway::before {\n content: \"\\f239\";\n}\n\n.fa-subway::before {\n content: \"\\f239\";\n}\n\n.fa-chart-gantt::before {\n content: \"\\e0e4\";\n}\n\n.fa-indian-rupee-sign::before {\n content: \"\\e1bc\";\n}\n\n.fa-indian-rupee::before {\n content: \"\\e1bc\";\n}\n\n.fa-inr::before {\n content: \"\\e1bc\";\n}\n\n.fa-crop-simple::before {\n content: \"\\f565\";\n}\n\n.fa-crop-alt::before {\n content: \"\\f565\";\n}\n\n.fa-money-bill-1::before {\n content: \"\\f3d1\";\n}\n\n.fa-money-bill-alt::before {\n content: \"\\f3d1\";\n}\n\n.fa-left-long::before {\n content: \"\\f30a\";\n}\n\n.fa-long-arrow-alt-left::before {\n content: \"\\f30a\";\n}\n\n.fa-dna::before {\n content: \"\\f471\";\n}\n\n.fa-virus-slash::before {\n content: \"\\e075\";\n}\n\n.fa-minus::before {\n content: \"\\f068\";\n}\n\n.fa-subtract::before {\n content: \"\\f068\";\n}\n\n.fa-chess::before {\n content: \"\\f439\";\n}\n\n.fa-arrow-left-long::before {\n content: \"\\f177\";\n}\n\n.fa-long-arrow-left::before {\n content: \"\\f177\";\n}\n\n.fa-plug-circle-check::before {\n content: \"\\e55c\";\n}\n\n.fa-street-view::before {\n content: \"\\f21d\";\n}\n\n.fa-franc-sign::before {\n content: \"\\e18f\";\n}\n\n.fa-volume-off::before {\n content: \"\\f026\";\n}\n\n.fa-hands-asl-interpreting::before {\n content: \"\\f2a3\";\n}\n\n.fa-american-sign-language-interpreting::before {\n content: \"\\f2a3\";\n}\n\n.fa-asl-interpreting::before {\n content: \"\\f2a3\";\n}\n\n.fa-hands-american-sign-language-interpreting::before {\n content: \"\\f2a3\";\n}\n\n.fa-gear::before {\n content: \"\\f013\";\n}\n\n.fa-cog::before {\n content: \"\\f013\";\n}\n\n.fa-droplet-slash::before {\n content: \"\\f5c7\";\n}\n\n.fa-tint-slash::before {\n content: \"\\f5c7\";\n}\n\n.fa-mosque::before {\n content: \"\\f678\";\n}\n\n.fa-mosquito::before {\n content: \"\\e52b\";\n}\n\n.fa-star-of-david::before {\n content: \"\\f69a\";\n}\n\n.fa-person-military-rifle::before {\n content: \"\\e54b\";\n}\n\n.fa-cart-shopping::before {\n content: \"\\f07a\";\n}\n\n.fa-shopping-cart::before {\n content: \"\\f07a\";\n}\n\n.fa-vials::before {\n content: \"\\f493\";\n}\n\n.fa-plug-circle-plus::before {\n content: \"\\e55f\";\n}\n\n.fa-place-of-worship::before {\n content: \"\\f67f\";\n}\n\n.fa-grip-vertical::before {\n content: \"\\f58e\";\n}\n\n.fa-arrow-turn-up::before {\n content: \"\\f148\";\n}\n\n.fa-level-up::before {\n content: \"\\f148\";\n}\n\n.fa-u::before {\n content: \"U\";\n}\n\n.fa-square-root-variable::before {\n content: \"\\f698\";\n}\n\n.fa-square-root-alt::before {\n content: \"\\f698\";\n}\n\n.fa-clock::before {\n content: \"\\f017\";\n}\n\n.fa-clock-four::before {\n content: \"\\f017\";\n}\n\n.fa-backward-step::before {\n content: \"\\f048\";\n}\n\n.fa-step-backward::before {\n content: \"\\f048\";\n}\n\n.fa-pallet::before {\n content: \"\\f482\";\n}\n\n.fa-faucet::before {\n content: \"\\e005\";\n}\n\n.fa-baseball-bat-ball::before {\n content: \"\\f432\";\n}\n\n.fa-s::before {\n content: \"S\";\n}\n\n.fa-timeline::before {\n content: \"\\e29c\";\n}\n\n.fa-keyboard::before {\n content: \"\\f11c\";\n}\n\n.fa-caret-down::before {\n content: \"\\f0d7\";\n}\n\n.fa-house-chimney-medical::before {\n content: \"\\f7f2\";\n}\n\n.fa-clinic-medical::before {\n content: \"\\f7f2\";\n}\n\n.fa-temperature-three-quarters::before {\n content: \"\\f2c8\";\n}\n\n.fa-temperature-3::before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-3::before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-three-quarters::before {\n content: \"\\f2c8\";\n}\n\n.fa-mobile-screen::before {\n content: \"\\f3cf\";\n}\n\n.fa-mobile-android-alt::before {\n content: \"\\f3cf\";\n}\n\n.fa-plane-up::before {\n content: \"\\e22d\";\n}\n\n.fa-piggy-bank::before {\n content: \"\\f4d3\";\n}\n\n.fa-battery-half::before {\n content: \"\\f242\";\n}\n\n.fa-battery-3::before {\n content: \"\\f242\";\n}\n\n.fa-mountain-city::before {\n content: \"\\e52e\";\n}\n\n.fa-coins::before {\n content: \"\\f51e\";\n}\n\n.fa-khanda::before {\n content: \"\\f66d\";\n}\n\n.fa-sliders::before {\n content: \"\\f1de\";\n}\n\n.fa-sliders-h::before {\n content: \"\\f1de\";\n}\n\n.fa-folder-tree::before {\n content: \"\\f802\";\n}\n\n.fa-network-wired::before {\n content: \"\\f6ff\";\n}\n\n.fa-map-pin::before {\n content: \"\\f276\";\n}\n\n.fa-hamsa::before {\n content: \"\\f665\";\n}\n\n.fa-cent-sign::before {\n content: \"\\e3f5\";\n}\n\n.fa-flask::before {\n content: \"\\f0c3\";\n}\n\n.fa-person-pregnant::before {\n content: \"\\e31e\";\n}\n\n.fa-wand-sparkles::before {\n content: \"\\f72b\";\n}\n\n.fa-ellipsis-vertical::before {\n content: \"\\f142\";\n}\n\n.fa-ellipsis-v::before {\n content: \"\\f142\";\n}\n\n.fa-ticket::before {\n content: \"\\f145\";\n}\n\n.fa-power-off::before {\n content: \"\\f011\";\n}\n\n.fa-right-long::before {\n content: \"\\f30b\";\n}\n\n.fa-long-arrow-alt-right::before {\n content: \"\\f30b\";\n}\n\n.fa-flag-usa::before {\n content: \"\\f74d\";\n}\n\n.fa-laptop-file::before {\n content: \"\\e51d\";\n}\n\n.fa-tty::before {\n content: \"\\f1e4\";\n}\n\n.fa-teletype::before {\n content: \"\\f1e4\";\n}\n\n.fa-diagram-next::before {\n content: \"\\e476\";\n}\n\n.fa-person-rifle::before {\n content: \"\\e54e\";\n}\n\n.fa-house-medical-circle-exclamation::before {\n content: \"\\e512\";\n}\n\n.fa-closed-captioning::before {\n content: \"\\f20a\";\n}\n\n.fa-person-hiking::before {\n content: \"\\f6ec\";\n}\n\n.fa-hiking::before {\n content: \"\\f6ec\";\n}\n\n.fa-venus-double::before {\n content: \"\\f226\";\n}\n\n.fa-images::before {\n content: \"\\f302\";\n}\n\n.fa-calculator::before {\n content: \"\\f1ec\";\n}\n\n.fa-people-pulling::before {\n content: \"\\e535\";\n}\n\n.fa-n::before {\n content: \"N\";\n}\n\n.fa-cable-car::before {\n content: \"\\f7da\";\n}\n\n.fa-tram::before {\n content: \"\\f7da\";\n}\n\n.fa-cloud-rain::before {\n content: \"\\f73d\";\n}\n\n.fa-building-circle-xmark::before {\n content: \"\\e4d4\";\n}\n\n.fa-ship::before {\n content: \"\\f21a\";\n}\n\n.fa-arrows-down-to-line::before {\n content: \"\\e4b8\";\n}\n\n.fa-download::before {\n content: \"\\f019\";\n}\n\n.fa-face-grin::before {\n content: \"\\f580\";\n}\n\n.fa-grin::before {\n content: \"\\f580\";\n}\n\n.fa-delete-left::before {\n content: \"\\f55a\";\n}\n\n.fa-backspace::before {\n content: \"\\f55a\";\n}\n\n.fa-eye-dropper::before {\n content: \"\\f1fb\";\n}\n\n.fa-eye-dropper-empty::before {\n content: \"\\f1fb\";\n}\n\n.fa-eyedropper::before {\n content: \"\\f1fb\";\n}\n\n.fa-file-circle-check::before {\n content: \"\\e5a0\";\n}\n\n.fa-forward::before {\n content: \"\\f04e\";\n}\n\n.fa-mobile::before {\n content: \"\\f3ce\";\n}\n\n.fa-mobile-android::before {\n content: \"\\f3ce\";\n}\n\n.fa-mobile-phone::before {\n content: \"\\f3ce\";\n}\n\n.fa-face-meh::before {\n content: \"\\f11a\";\n}\n\n.fa-meh::before {\n content: \"\\f11a\";\n}\n\n.fa-align-center::before {\n content: \"\\f037\";\n}\n\n.fa-book-skull::before {\n content: \"\\f6b7\";\n}\n\n.fa-book-dead::before {\n content: \"\\f6b7\";\n}\n\n.fa-id-card::before {\n content: \"\\f2c2\";\n}\n\n.fa-drivers-license::before {\n content: \"\\f2c2\";\n}\n\n.fa-outdent::before {\n content: \"\\f03b\";\n}\n\n.fa-dedent::before {\n content: \"\\f03b\";\n}\n\n.fa-heart-circle-exclamation::before {\n content: \"\\e4fe\";\n}\n\n.fa-house::before {\n content: \"\\f015\";\n}\n\n.fa-home::before {\n content: \"\\f015\";\n}\n\n.fa-home-alt::before {\n content: \"\\f015\";\n}\n\n.fa-home-lg-alt::before {\n content: \"\\f015\";\n}\n\n.fa-calendar-week::before {\n content: \"\\f784\";\n}\n\n.fa-laptop-medical::before {\n content: \"\\f812\";\n}\n\n.fa-b::before {\n content: \"B\";\n}\n\n.fa-file-medical::before {\n content: \"\\f477\";\n}\n\n.fa-dice-one::before {\n content: \"\\f525\";\n}\n\n.fa-kiwi-bird::before {\n content: \"\\f535\";\n}\n\n.fa-arrow-right-arrow-left::before {\n content: \"\\f0ec\";\n}\n\n.fa-exchange::before {\n content: \"\\f0ec\";\n}\n\n.fa-rotate-right::before {\n content: \"\\f2f9\";\n}\n\n.fa-redo-alt::before {\n content: \"\\f2f9\";\n}\n\n.fa-rotate-forward::before {\n content: \"\\f2f9\";\n}\n\n.fa-utensils::before {\n content: \"\\f2e7\";\n}\n\n.fa-cutlery::before {\n content: \"\\f2e7\";\n}\n\n.fa-arrow-up-wide-short::before {\n content: \"\\f161\";\n}\n\n.fa-sort-amount-up::before {\n content: \"\\f161\";\n}\n\n.fa-mill-sign::before {\n content: \"\\e1ed\";\n}\n\n.fa-bowl-rice::before {\n content: \"\\e2eb\";\n}\n\n.fa-skull::before {\n content: \"\\f54c\";\n}\n\n.fa-tower-broadcast::before {\n content: \"\\f519\";\n}\n\n.fa-broadcast-tower::before {\n content: \"\\f519\";\n}\n\n.fa-truck-pickup::before {\n content: \"\\f63c\";\n}\n\n.fa-up-long::before {\n content: \"\\f30c\";\n}\n\n.fa-long-arrow-alt-up::before {\n content: \"\\f30c\";\n}\n\n.fa-stop::before {\n content: \"\\f04d\";\n}\n\n.fa-code-merge::before {\n content: \"\\f387\";\n}\n\n.fa-upload::before {\n content: \"\\f093\";\n}\n\n.fa-hurricane::before {\n content: \"\\f751\";\n}\n\n.fa-mound::before {\n content: \"\\e52d\";\n}\n\n.fa-toilet-portable::before {\n content: \"\\e583\";\n}\n\n.fa-compact-disc::before {\n content: \"\\f51f\";\n}\n\n.fa-file-arrow-down::before {\n content: \"\\f56d\";\n}\n\n.fa-file-download::before {\n content: \"\\f56d\";\n}\n\n.fa-caravan::before {\n content: \"\\f8ff\";\n}\n\n.fa-shield-cat::before {\n content: \"\\e572\";\n}\n\n.fa-bolt::before {\n content: \"\\f0e7\";\n}\n\n.fa-zap::before {\n content: \"\\f0e7\";\n}\n\n.fa-glass-water::before {\n content: \"\\e4f4\";\n}\n\n.fa-oil-well::before {\n content: \"\\e532\";\n}\n\n.fa-vault::before {\n content: \"\\e2c5\";\n}\n\n.fa-mars::before {\n content: \"\\f222\";\n}\n\n.fa-toilet::before {\n content: \"\\f7d8\";\n}\n\n.fa-plane-circle-xmark::before {\n content: \"\\e557\";\n}\n\n.fa-yen-sign::before {\n content: \"\\f157\";\n}\n\n.fa-cny::before {\n content: \"\\f157\";\n}\n\n.fa-jpy::before {\n content: \"\\f157\";\n}\n\n.fa-rmb::before {\n content: \"\\f157\";\n}\n\n.fa-yen::before {\n content: \"\\f157\";\n}\n\n.fa-ruble-sign::before {\n content: \"\\f158\";\n}\n\n.fa-rouble::before {\n content: \"\\f158\";\n}\n\n.fa-rub::before {\n content: \"\\f158\";\n}\n\n.fa-ruble::before {\n content: \"\\f158\";\n}\n\n.fa-sun::before {\n content: \"\\f185\";\n}\n\n.fa-guitar::before {\n content: \"\\f7a6\";\n}\n\n.fa-face-laugh-wink::before {\n content: \"\\f59c\";\n}\n\n.fa-laugh-wink::before {\n content: \"\\f59c\";\n}\n\n.fa-horse-head::before {\n content: \"\\f7ab\";\n}\n\n.fa-bore-hole::before {\n content: \"\\e4c3\";\n}\n\n.fa-industry::before {\n content: \"\\f275\";\n}\n\n.fa-circle-down::before {\n content: \"\\f358\";\n}\n\n.fa-arrow-alt-circle-down::before {\n content: \"\\f358\";\n}\n\n.fa-arrows-turn-to-dots::before {\n content: \"\\e4c1\";\n}\n\n.fa-florin-sign::before {\n content: \"\\e184\";\n}\n\n.fa-arrow-down-short-wide::before {\n content: \"\\f884\";\n}\n\n.fa-sort-amount-desc::before {\n content: \"\\f884\";\n}\n\n.fa-sort-amount-down-alt::before {\n content: \"\\f884\";\n}\n\n.fa-less-than::before {\n content: \"\\<\";\n}\n\n.fa-angle-down::before {\n content: \"\\f107\";\n}\n\n.fa-car-tunnel::before {\n content: \"\\e4de\";\n}\n\n.fa-head-side-cough::before {\n content: \"\\e061\";\n}\n\n.fa-grip-lines::before {\n content: \"\\f7a4\";\n}\n\n.fa-thumbs-down::before {\n content: \"\\f165\";\n}\n\n.fa-user-lock::before {\n content: \"\\f502\";\n}\n\n.fa-arrow-right-long::before {\n content: \"\\f178\";\n}\n\n.fa-long-arrow-right::before {\n content: \"\\f178\";\n}\n\n.fa-anchor-circle-xmark::before {\n content: \"\\e4ac\";\n}\n\n.fa-ellipsis::before {\n content: \"\\f141\";\n}\n\n.fa-ellipsis-h::before {\n content: \"\\f141\";\n}\n\n.fa-chess-pawn::before {\n content: \"\\f443\";\n}\n\n.fa-kit-medical::before {\n content: \"\\f479\";\n}\n\n.fa-first-aid::before {\n content: \"\\f479\";\n}\n\n.fa-person-through-window::before {\n content: \"\\e5a9\";\n}\n\n.fa-toolbox::before {\n content: \"\\f552\";\n}\n\n.fa-hands-holding-circle::before {\n content: \"\\e4fb\";\n}\n\n.fa-bug::before {\n content: \"\\f188\";\n}\n\n.fa-credit-card::before {\n content: \"\\f09d\";\n}\n\n.fa-credit-card-alt::before {\n content: \"\\f09d\";\n}\n\n.fa-car::before {\n content: \"\\f1b9\";\n}\n\n.fa-automobile::before {\n content: \"\\f1b9\";\n}\n\n.fa-hand-holding-hand::before {\n content: \"\\e4f7\";\n}\n\n.fa-book-open-reader::before {\n content: \"\\f5da\";\n}\n\n.fa-book-reader::before {\n content: \"\\f5da\";\n}\n\n.fa-mountain-sun::before {\n content: \"\\e52f\";\n}\n\n.fa-arrows-left-right-to-line::before {\n content: \"\\e4ba\";\n}\n\n.fa-dice-d20::before {\n content: \"\\f6cf\";\n}\n\n.fa-truck-droplet::before {\n content: \"\\e58c\";\n}\n\n.fa-file-circle-xmark::before {\n content: \"\\e5a1\";\n}\n\n.fa-temperature-arrow-up::before {\n content: \"\\e040\";\n}\n\n.fa-temperature-up::before {\n content: \"\\e040\";\n}\n\n.fa-medal::before {\n content: \"\\f5a2\";\n}\n\n.fa-bed::before {\n content: \"\\f236\";\n}\n\n.fa-square-h::before {\n content: \"\\f0fd\";\n}\n\n.fa-h-square::before {\n content: \"\\f0fd\";\n}\n\n.fa-podcast::before {\n content: \"\\f2ce\";\n}\n\n.fa-temperature-full::before {\n content: \"\\f2c7\";\n}\n\n.fa-temperature-4::before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-4::before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-full::before {\n content: \"\\f2c7\";\n}\n\n.fa-bell::before {\n content: \"\\f0f3\";\n}\n\n.fa-superscript::before {\n content: \"\\f12b\";\n}\n\n.fa-plug-circle-xmark::before {\n content: \"\\e560\";\n}\n\n.fa-star-of-life::before {\n content: \"\\f621\";\n}\n\n.fa-phone-slash::before {\n content: \"\\f3dd\";\n}\n\n.fa-paint-roller::before {\n content: \"\\f5aa\";\n}\n\n.fa-handshake-angle::before {\n content: \"\\f4c4\";\n}\n\n.fa-hands-helping::before {\n content: \"\\f4c4\";\n}\n\n.fa-location-dot::before {\n content: \"\\f3c5\";\n}\n\n.fa-map-marker-alt::before {\n content: \"\\f3c5\";\n}\n\n.fa-file::before {\n content: \"\\f15b\";\n}\n\n.fa-greater-than::before {\n content: \"\\>\";\n}\n\n.fa-person-swimming::before {\n content: \"\\f5c4\";\n}\n\n.fa-swimmer::before {\n content: \"\\f5c4\";\n}\n\n.fa-arrow-down::before {\n content: \"\\f063\";\n}\n\n.fa-droplet::before {\n content: \"\\f043\";\n}\n\n.fa-tint::before {\n content: \"\\f043\";\n}\n\n.fa-eraser::before {\n content: \"\\f12d\";\n}\n\n.fa-earth-americas::before {\n content: \"\\f57d\";\n}\n\n.fa-earth::before {\n content: \"\\f57d\";\n}\n\n.fa-earth-america::before {\n content: \"\\f57d\";\n}\n\n.fa-globe-americas::before {\n content: \"\\f57d\";\n}\n\n.fa-person-burst::before {\n content: \"\\e53b\";\n}\n\n.fa-dove::before {\n content: \"\\f4ba\";\n}\n\n.fa-battery-empty::before {\n content: \"\\f244\";\n}\n\n.fa-battery-0::before {\n content: \"\\f244\";\n}\n\n.fa-socks::before {\n content: \"\\f696\";\n}\n\n.fa-inbox::before {\n content: \"\\f01c\";\n}\n\n.fa-section::before {\n content: \"\\e447\";\n}\n\n.fa-gauge-high::before {\n content: \"\\f625\";\n}\n\n.fa-tachometer-alt::before {\n content: \"\\f625\";\n}\n\n.fa-tachometer-alt-fast::before {\n content: \"\\f625\";\n}\n\n.fa-envelope-open-text::before {\n content: \"\\f658\";\n}\n\n.fa-hospital::before {\n content: \"\\f0f8\";\n}\n\n.fa-hospital-alt::before {\n content: \"\\f0f8\";\n}\n\n.fa-hospital-wide::before {\n content: \"\\f0f8\";\n}\n\n.fa-wine-bottle::before {\n content: \"\\f72f\";\n}\n\n.fa-chess-rook::before {\n content: \"\\f447\";\n}\n\n.fa-bars-staggered::before {\n content: \"\\f550\";\n}\n\n.fa-reorder::before {\n content: \"\\f550\";\n}\n\n.fa-stream::before {\n content: \"\\f550\";\n}\n\n.fa-dharmachakra::before {\n content: \"\\f655\";\n}\n\n.fa-hotdog::before {\n content: \"\\f80f\";\n}\n\n.fa-person-walking-with-cane::before {\n content: \"\\f29d\";\n}\n\n.fa-blind::before {\n content: \"\\f29d\";\n}\n\n.fa-drum::before {\n content: \"\\f569\";\n}\n\n.fa-ice-cream::before {\n content: \"\\f810\";\n}\n\n.fa-heart-circle-bolt::before {\n content: \"\\e4fc\";\n}\n\n.fa-fax::before {\n content: \"\\f1ac\";\n}\n\n.fa-paragraph::before {\n content: \"\\f1dd\";\n}\n\n.fa-check-to-slot::before {\n content: \"\\f772\";\n}\n\n.fa-vote-yea::before {\n content: \"\\f772\";\n}\n\n.fa-star-half::before {\n content: \"\\f089\";\n}\n\n.fa-boxes-stacked::before {\n content: \"\\f468\";\n}\n\n.fa-boxes::before {\n content: \"\\f468\";\n}\n\n.fa-boxes-alt::before {\n content: \"\\f468\";\n}\n\n.fa-link::before {\n content: \"\\f0c1\";\n}\n\n.fa-chain::before {\n content: \"\\f0c1\";\n}\n\n.fa-ear-listen::before {\n content: \"\\f2a2\";\n}\n\n.fa-assistive-listening-systems::before {\n content: \"\\f2a2\";\n}\n\n.fa-tree-city::before {\n content: \"\\e587\";\n}\n\n.fa-play::before {\n content: \"\\f04b\";\n}\n\n.fa-font::before {\n content: \"\\f031\";\n}\n\n.fa-table-cells-row-lock::before {\n content: \"\\e67a\";\n}\n\n.fa-rupiah-sign::before {\n content: \"\\e23d\";\n}\n\n.fa-magnifying-glass::before {\n content: \"\\f002\";\n}\n\n.fa-search::before {\n content: \"\\f002\";\n}\n\n.fa-table-tennis-paddle-ball::before {\n content: \"\\f45d\";\n}\n\n.fa-ping-pong-paddle-ball::before {\n content: \"\\f45d\";\n}\n\n.fa-table-tennis::before {\n content: \"\\f45d\";\n}\n\n.fa-person-dots-from-line::before {\n content: \"\\f470\";\n}\n\n.fa-diagnoses::before {\n content: \"\\f470\";\n}\n\n.fa-trash-can-arrow-up::before {\n content: \"\\f82a\";\n}\n\n.fa-trash-restore-alt::before {\n content: \"\\f82a\";\n}\n\n.fa-naira-sign::before {\n content: \"\\e1f6\";\n}\n\n.fa-cart-arrow-down::before {\n content: \"\\f218\";\n}\n\n.fa-walkie-talkie::before {\n content: \"\\f8ef\";\n}\n\n.fa-file-pen::before {\n content: \"\\f31c\";\n}\n\n.fa-file-edit::before {\n content: \"\\f31c\";\n}\n\n.fa-receipt::before {\n content: \"\\f543\";\n}\n\n.fa-square-pen::before {\n content: \"\\f14b\";\n}\n\n.fa-pen-square::before {\n content: \"\\f14b\";\n}\n\n.fa-pencil-square::before {\n content: \"\\f14b\";\n}\n\n.fa-suitcase-rolling::before {\n content: \"\\f5c1\";\n}\n\n.fa-person-circle-exclamation::before {\n content: \"\\e53f\";\n}\n\n.fa-chevron-down::before {\n content: \"\\f078\";\n}\n\n.fa-battery-full::before {\n content: \"\\f240\";\n}\n\n.fa-battery::before {\n content: \"\\f240\";\n}\n\n.fa-battery-5::before {\n content: \"\\f240\";\n}\n\n.fa-skull-crossbones::before {\n content: \"\\f714\";\n}\n\n.fa-code-compare::before {\n content: \"\\e13a\";\n}\n\n.fa-list-ul::before {\n content: \"\\f0ca\";\n}\n\n.fa-list-dots::before {\n content: \"\\f0ca\";\n}\n\n.fa-school-lock::before {\n content: \"\\e56f\";\n}\n\n.fa-tower-cell::before {\n content: \"\\e585\";\n}\n\n.fa-down-long::before {\n content: \"\\f309\";\n}\n\n.fa-long-arrow-alt-down::before {\n content: \"\\f309\";\n}\n\n.fa-ranking-star::before {\n content: \"\\e561\";\n}\n\n.fa-chess-king::before {\n content: \"\\f43f\";\n}\n\n.fa-person-harassing::before {\n content: \"\\e549\";\n}\n\n.fa-brazilian-real-sign::before {\n content: \"\\e46c\";\n}\n\n.fa-landmark-dome::before {\n content: \"\\f752\";\n}\n\n.fa-landmark-alt::before {\n content: \"\\f752\";\n}\n\n.fa-arrow-up::before {\n content: \"\\f062\";\n}\n\n.fa-tv::before {\n content: \"\\f26c\";\n}\n\n.fa-television::before {\n content: \"\\f26c\";\n}\n\n.fa-tv-alt::before {\n content: \"\\f26c\";\n}\n\n.fa-shrimp::before {\n content: \"\\e448\";\n}\n\n.fa-list-check::before {\n content: \"\\f0ae\";\n}\n\n.fa-tasks::before {\n content: \"\\f0ae\";\n}\n\n.fa-jug-detergent::before {\n content: \"\\e519\";\n}\n\n.fa-circle-user::before {\n content: \"\\f2bd\";\n}\n\n.fa-user-circle::before {\n content: \"\\f2bd\";\n}\n\n.fa-user-shield::before {\n content: \"\\f505\";\n}\n\n.fa-wind::before {\n content: \"\\f72e\";\n}\n\n.fa-car-burst::before {\n content: \"\\f5e1\";\n}\n\n.fa-car-crash::before {\n content: \"\\f5e1\";\n}\n\n.fa-y::before {\n content: \"Y\";\n}\n\n.fa-person-snowboarding::before {\n content: \"\\f7ce\";\n}\n\n.fa-snowboarding::before {\n content: \"\\f7ce\";\n}\n\n.fa-truck-fast::before {\n content: \"\\f48b\";\n}\n\n.fa-shipping-fast::before {\n content: \"\\f48b\";\n}\n\n.fa-fish::before {\n content: \"\\f578\";\n}\n\n.fa-user-graduate::before {\n content: \"\\f501\";\n}\n\n.fa-circle-half-stroke::before {\n content: \"\\f042\";\n}\n\n.fa-adjust::before {\n content: \"\\f042\";\n}\n\n.fa-clapperboard::before {\n content: \"\\e131\";\n}\n\n.fa-circle-radiation::before {\n content: \"\\f7ba\";\n}\n\n.fa-radiation-alt::before {\n content: \"\\f7ba\";\n}\n\n.fa-baseball::before {\n content: \"\\f433\";\n}\n\n.fa-baseball-ball::before {\n content: \"\\f433\";\n}\n\n.fa-jet-fighter-up::before {\n content: \"\\e518\";\n}\n\n.fa-diagram-project::before {\n content: \"\\f542\";\n}\n\n.fa-project-diagram::before {\n content: \"\\f542\";\n}\n\n.fa-copy::before {\n content: \"\\f0c5\";\n}\n\n.fa-volume-xmark::before {\n content: \"\\f6a9\";\n}\n\n.fa-volume-mute::before {\n content: \"\\f6a9\";\n}\n\n.fa-volume-times::before {\n content: \"\\f6a9\";\n}\n\n.fa-hand-sparkles::before {\n content: \"\\e05d\";\n}\n\n.fa-grip::before {\n content: \"\\f58d\";\n}\n\n.fa-grip-horizontal::before {\n content: \"\\f58d\";\n}\n\n.fa-share-from-square::before {\n content: \"\\f14d\";\n}\n\n.fa-share-square::before {\n content: \"\\f14d\";\n}\n\n.fa-child-combatant::before {\n content: \"\\e4e0\";\n}\n\n.fa-child-rifle::before {\n content: \"\\e4e0\";\n}\n\n.fa-gun::before {\n content: \"\\e19b\";\n}\n\n.fa-square-phone::before {\n content: \"\\f098\";\n}\n\n.fa-phone-square::before {\n content: \"\\f098\";\n}\n\n.fa-plus::before {\n content: \"\\+\";\n}\n\n.fa-add::before {\n content: \"\\+\";\n}\n\n.fa-expand::before {\n content: \"\\f065\";\n}\n\n.fa-computer::before {\n content: \"\\e4e5\";\n}\n\n.fa-xmark::before {\n content: \"\\f00d\";\n}\n\n.fa-close::before {\n content: \"\\f00d\";\n}\n\n.fa-multiply::before {\n content: \"\\f00d\";\n}\n\n.fa-remove::before {\n content: \"\\f00d\";\n}\n\n.fa-times::before {\n content: \"\\f00d\";\n}\n\n.fa-arrows-up-down-left-right::before {\n content: \"\\f047\";\n}\n\n.fa-arrows::before {\n content: \"\\f047\";\n}\n\n.fa-chalkboard-user::before {\n content: \"\\f51c\";\n}\n\n.fa-chalkboard-teacher::before {\n content: \"\\f51c\";\n}\n\n.fa-peso-sign::before {\n content: \"\\e222\";\n}\n\n.fa-building-shield::before {\n content: \"\\e4d8\";\n}\n\n.fa-baby::before {\n content: \"\\f77c\";\n}\n\n.fa-users-line::before {\n content: \"\\e592\";\n}\n\n.fa-quote-left::before {\n content: \"\\f10d\";\n}\n\n.fa-quote-left-alt::before {\n content: \"\\f10d\";\n}\n\n.fa-tractor::before {\n content: \"\\f722\";\n}\n\n.fa-trash-arrow-up::before {\n content: \"\\f829\";\n}\n\n.fa-trash-restore::before {\n content: \"\\f829\";\n}\n\n.fa-arrow-down-up-lock::before {\n content: \"\\e4b0\";\n}\n\n.fa-lines-leaning::before {\n content: \"\\e51e\";\n}\n\n.fa-ruler-combined::before {\n content: \"\\f546\";\n}\n\n.fa-copyright::before {\n content: \"\\f1f9\";\n}\n\n.fa-equals::before {\n content: \"\\=\";\n}\n\n.fa-blender::before {\n content: \"\\f517\";\n}\n\n.fa-teeth::before {\n content: \"\\f62e\";\n}\n\n.fa-shekel-sign::before {\n content: \"\\f20b\";\n}\n\n.fa-ils::before {\n content: \"\\f20b\";\n}\n\n.fa-shekel::before {\n content: \"\\f20b\";\n}\n\n.fa-sheqel::before {\n content: \"\\f20b\";\n}\n\n.fa-sheqel-sign::before {\n content: \"\\f20b\";\n}\n\n.fa-map::before {\n content: \"\\f279\";\n}\n\n.fa-rocket::before {\n content: \"\\f135\";\n}\n\n.fa-photo-film::before {\n content: \"\\f87c\";\n}\n\n.fa-photo-video::before {\n content: \"\\f87c\";\n}\n\n.fa-folder-minus::before {\n content: \"\\f65d\";\n}\n\n.fa-store::before {\n content: \"\\f54e\";\n}\n\n.fa-arrow-trend-up::before {\n content: \"\\e098\";\n}\n\n.fa-plug-circle-minus::before {\n content: \"\\e55e\";\n}\n\n.fa-sign-hanging::before {\n content: \"\\f4d9\";\n}\n\n.fa-sign::before {\n content: \"\\f4d9\";\n}\n\n.fa-bezier-curve::before {\n content: \"\\f55b\";\n}\n\n.fa-bell-slash::before {\n content: \"\\f1f6\";\n}\n\n.fa-tablet::before {\n content: \"\\f3fb\";\n}\n\n.fa-tablet-android::before {\n content: \"\\f3fb\";\n}\n\n.fa-school-flag::before {\n content: \"\\e56e\";\n}\n\n.fa-fill::before {\n content: \"\\f575\";\n}\n\n.fa-angle-up::before {\n content: \"\\f106\";\n}\n\n.fa-drumstick-bite::before {\n content: \"\\f6d7\";\n}\n\n.fa-holly-berry::before {\n content: \"\\f7aa\";\n}\n\n.fa-chevron-left::before {\n content: \"\\f053\";\n}\n\n.fa-bacteria::before {\n content: \"\\e059\";\n}\n\n.fa-hand-lizard::before {\n content: \"\\f258\";\n}\n\n.fa-notdef::before {\n content: \"\\e1fe\";\n}\n\n.fa-disease::before {\n content: \"\\f7fa\";\n}\n\n.fa-briefcase-medical::before {\n content: \"\\f469\";\n}\n\n.fa-genderless::before {\n content: \"\\f22d\";\n}\n\n.fa-chevron-right::before {\n content: \"\\f054\";\n}\n\n.fa-retweet::before {\n content: \"\\f079\";\n}\n\n.fa-car-rear::before {\n content: \"\\f5de\";\n}\n\n.fa-car-alt::before {\n content: \"\\f5de\";\n}\n\n.fa-pump-soap::before {\n content: \"\\e06b\";\n}\n\n.fa-video-slash::before {\n content: \"\\f4e2\";\n}\n\n.fa-battery-quarter::before {\n content: \"\\f243\";\n}\n\n.fa-battery-2::before {\n content: \"\\f243\";\n}\n\n.fa-radio::before {\n content: \"\\f8d7\";\n}\n\n.fa-baby-carriage::before {\n content: \"\\f77d\";\n}\n\n.fa-carriage-baby::before {\n content: \"\\f77d\";\n}\n\n.fa-traffic-light::before {\n content: \"\\f637\";\n}\n\n.fa-thermometer::before {\n content: \"\\f491\";\n}\n\n.fa-vr-cardboard::before {\n content: \"\\f729\";\n}\n\n.fa-hand-middle-finger::before {\n content: \"\\f806\";\n}\n\n.fa-percent::before {\n content: \"\\%\";\n}\n\n.fa-percentage::before {\n content: \"\\%\";\n}\n\n.fa-truck-moving::before {\n content: \"\\f4df\";\n}\n\n.fa-glass-water-droplet::before {\n content: \"\\e4f5\";\n}\n\n.fa-display::before {\n content: \"\\e163\";\n}\n\n.fa-face-smile::before {\n content: \"\\f118\";\n}\n\n.fa-smile::before {\n content: \"\\f118\";\n}\n\n.fa-thumbtack::before {\n content: \"\\f08d\";\n}\n\n.fa-thumb-tack::before {\n content: \"\\f08d\";\n}\n\n.fa-trophy::before {\n content: \"\\f091\";\n}\n\n.fa-person-praying::before {\n content: \"\\f683\";\n}\n\n.fa-pray::before {\n content: \"\\f683\";\n}\n\n.fa-hammer::before {\n content: \"\\f6e3\";\n}\n\n.fa-hand-peace::before {\n content: \"\\f25b\";\n}\n\n.fa-rotate::before {\n content: \"\\f2f1\";\n}\n\n.fa-sync-alt::before {\n content: \"\\f2f1\";\n}\n\n.fa-spinner::before {\n content: \"\\f110\";\n}\n\n.fa-robot::before {\n content: \"\\f544\";\n}\n\n.fa-peace::before {\n content: \"\\f67c\";\n}\n\n.fa-gears::before {\n content: \"\\f085\";\n}\n\n.fa-cogs::before {\n content: \"\\f085\";\n}\n\n.fa-warehouse::before {\n content: \"\\f494\";\n}\n\n.fa-arrow-up-right-dots::before {\n content: \"\\e4b7\";\n}\n\n.fa-splotch::before {\n content: \"\\f5bc\";\n}\n\n.fa-face-grin-hearts::before {\n content: \"\\f584\";\n}\n\n.fa-grin-hearts::before {\n content: \"\\f584\";\n}\n\n.fa-dice-four::before {\n content: \"\\f524\";\n}\n\n.fa-sim-card::before {\n content: \"\\f7c4\";\n}\n\n.fa-transgender::before {\n content: \"\\f225\";\n}\n\n.fa-transgender-alt::before {\n content: \"\\f225\";\n}\n\n.fa-mercury::before {\n content: \"\\f223\";\n}\n\n.fa-arrow-turn-down::before {\n content: \"\\f149\";\n}\n\n.fa-level-down::before {\n content: \"\\f149\";\n}\n\n.fa-person-falling-burst::before {\n content: \"\\e547\";\n}\n\n.fa-award::before {\n content: \"\\f559\";\n}\n\n.fa-ticket-simple::before {\n content: \"\\f3ff\";\n}\n\n.fa-ticket-alt::before {\n content: \"\\f3ff\";\n}\n\n.fa-building::before {\n content: \"\\f1ad\";\n}\n\n.fa-angles-left::before {\n content: \"\\f100\";\n}\n\n.fa-angle-double-left::before {\n content: \"\\f100\";\n}\n\n.fa-qrcode::before {\n content: \"\\f029\";\n}\n\n.fa-clock-rotate-left::before {\n content: \"\\f1da\";\n}\n\n.fa-history::before {\n content: \"\\f1da\";\n}\n\n.fa-face-grin-beam-sweat::before {\n content: \"\\f583\";\n}\n\n.fa-grin-beam-sweat::before {\n content: \"\\f583\";\n}\n\n.fa-file-export::before {\n content: \"\\f56e\";\n}\n\n.fa-arrow-right-from-file::before {\n content: \"\\f56e\";\n}\n\n.fa-shield::before {\n content: \"\\f132\";\n}\n\n.fa-shield-blank::before {\n content: \"\\f132\";\n}\n\n.fa-arrow-up-short-wide::before {\n content: \"\\f885\";\n}\n\n.fa-sort-amount-up-alt::before {\n content: \"\\f885\";\n}\n\n.fa-house-medical::before {\n content: \"\\e3b2\";\n}\n\n.fa-golf-ball-tee::before {\n content: \"\\f450\";\n}\n\n.fa-golf-ball::before {\n content: \"\\f450\";\n}\n\n.fa-circle-chevron-left::before {\n content: \"\\f137\";\n}\n\n.fa-chevron-circle-left::before {\n content: \"\\f137\";\n}\n\n.fa-house-chimney-window::before {\n content: \"\\e00d\";\n}\n\n.fa-pen-nib::before {\n content: \"\\f5ad\";\n}\n\n.fa-tent-arrow-turn-left::before {\n content: \"\\e580\";\n}\n\n.fa-tents::before {\n content: \"\\e582\";\n}\n\n.fa-wand-magic::before {\n content: \"\\f0d0\";\n}\n\n.fa-magic::before {\n content: \"\\f0d0\";\n}\n\n.fa-dog::before {\n content: \"\\f6d3\";\n}\n\n.fa-carrot::before {\n content: \"\\f787\";\n}\n\n.fa-moon::before {\n content: \"\\f186\";\n}\n\n.fa-wine-glass-empty::before {\n content: \"\\f5ce\";\n}\n\n.fa-wine-glass-alt::before {\n content: \"\\f5ce\";\n}\n\n.fa-cheese::before {\n content: \"\\f7ef\";\n}\n\n.fa-yin-yang::before {\n content: \"\\f6ad\";\n}\n\n.fa-music::before {\n content: \"\\f001\";\n}\n\n.fa-code-commit::before {\n content: \"\\f386\";\n}\n\n.fa-temperature-low::before {\n content: \"\\f76b\";\n}\n\n.fa-person-biking::before {\n content: \"\\f84a\";\n}\n\n.fa-biking::before {\n content: \"\\f84a\";\n}\n\n.fa-broom::before {\n content: \"\\f51a\";\n}\n\n.fa-shield-heart::before {\n content: \"\\e574\";\n}\n\n.fa-gopuram::before {\n content: \"\\f664\";\n}\n\n.fa-earth-oceania::before {\n content: \"\\e47b\";\n}\n\n.fa-globe-oceania::before {\n content: \"\\e47b\";\n}\n\n.fa-square-xmark::before {\n content: \"\\f2d3\";\n}\n\n.fa-times-square::before {\n content: \"\\f2d3\";\n}\n\n.fa-xmark-square::before {\n content: \"\\f2d3\";\n}\n\n.fa-hashtag::before {\n content: \"\\#\";\n}\n\n.fa-up-right-and-down-left-from-center::before {\n content: \"\\f424\";\n}\n\n.fa-expand-alt::before {\n content: \"\\f424\";\n}\n\n.fa-oil-can::before {\n content: \"\\f613\";\n}\n\n.fa-t::before {\n content: \"T\";\n}\n\n.fa-hippo::before {\n content: \"\\f6ed\";\n}\n\n.fa-chart-column::before {\n content: \"\\e0e3\";\n}\n\n.fa-infinity::before {\n content: \"\\f534\";\n}\n\n.fa-vial-circle-check::before {\n content: \"\\e596\";\n}\n\n.fa-person-arrow-down-to-line::before {\n content: \"\\e538\";\n}\n\n.fa-voicemail::before {\n content: \"\\f897\";\n}\n\n.fa-fan::before {\n content: \"\\f863\";\n}\n\n.fa-person-walking-luggage::before {\n content: \"\\e554\";\n}\n\n.fa-up-down::before {\n content: \"\\f338\";\n}\n\n.fa-arrows-alt-v::before {\n content: \"\\f338\";\n}\n\n.fa-cloud-moon-rain::before {\n content: \"\\f73c\";\n}\n\n.fa-calendar::before {\n content: \"\\f133\";\n}\n\n.fa-trailer::before {\n content: \"\\e041\";\n}\n\n.fa-bahai::before {\n content: \"\\f666\";\n}\n\n.fa-haykal::before {\n content: \"\\f666\";\n}\n\n.fa-sd-card::before {\n content: \"\\f7c2\";\n}\n\n.fa-dragon::before {\n content: \"\\f6d5\";\n}\n\n.fa-shoe-prints::before {\n content: \"\\f54b\";\n}\n\n.fa-circle-plus::before {\n content: \"\\f055\";\n}\n\n.fa-plus-circle::before {\n content: \"\\f055\";\n}\n\n.fa-face-grin-tongue-wink::before {\n content: \"\\f58b\";\n}\n\n.fa-grin-tongue-wink::before {\n content: \"\\f58b\";\n}\n\n.fa-hand-holding::before {\n content: \"\\f4bd\";\n}\n\n.fa-plug-circle-exclamation::before {\n content: \"\\e55d\";\n}\n\n.fa-link-slash::before {\n content: \"\\f127\";\n}\n\n.fa-chain-broken::before {\n content: \"\\f127\";\n}\n\n.fa-chain-slash::before {\n content: \"\\f127\";\n}\n\n.fa-unlink::before {\n content: \"\\f127\";\n}\n\n.fa-clone::before {\n content: \"\\f24d\";\n}\n\n.fa-person-walking-arrow-loop-left::before {\n content: \"\\e551\";\n}\n\n.fa-arrow-up-z-a::before {\n content: \"\\f882\";\n}\n\n.fa-sort-alpha-up-alt::before {\n content: \"\\f882\";\n}\n\n.fa-fire-flame-curved::before {\n content: \"\\f7e4\";\n}\n\n.fa-fire-alt::before {\n content: \"\\f7e4\";\n}\n\n.fa-tornado::before {\n content: \"\\f76f\";\n}\n\n.fa-file-circle-plus::before {\n content: \"\\e494\";\n}\n\n.fa-book-quran::before {\n content: \"\\f687\";\n}\n\n.fa-quran::before {\n content: \"\\f687\";\n}\n\n.fa-anchor::before {\n content: \"\\f13d\";\n}\n\n.fa-border-all::before {\n content: \"\\f84c\";\n}\n\n.fa-face-angry::before {\n content: \"\\f556\";\n}\n\n.fa-angry::before {\n content: \"\\f556\";\n}\n\n.fa-cookie-bite::before {\n content: \"\\f564\";\n}\n\n.fa-arrow-trend-down::before {\n content: \"\\e097\";\n}\n\n.fa-rss::before {\n content: \"\\f09e\";\n}\n\n.fa-feed::before {\n content: \"\\f09e\";\n}\n\n.fa-draw-polygon::before {\n content: \"\\f5ee\";\n}\n\n.fa-scale-balanced::before {\n content: \"\\f24e\";\n}\n\n.fa-balance-scale::before {\n content: \"\\f24e\";\n}\n\n.fa-gauge-simple-high::before {\n content: \"\\f62a\";\n}\n\n.fa-tachometer::before {\n content: \"\\f62a\";\n}\n\n.fa-tachometer-fast::before {\n content: \"\\f62a\";\n}\n\n.fa-shower::before {\n content: \"\\f2cc\";\n}\n\n.fa-desktop::before {\n content: \"\\f390\";\n}\n\n.fa-desktop-alt::before {\n content: \"\\f390\";\n}\n\n.fa-m::before {\n content: \"M\";\n}\n\n.fa-table-list::before {\n content: \"\\f00b\";\n}\n\n.fa-th-list::before {\n content: \"\\f00b\";\n}\n\n.fa-comment-sms::before {\n content: \"\\f7cd\";\n}\n\n.fa-sms::before {\n content: \"\\f7cd\";\n}\n\n.fa-book::before {\n content: \"\\f02d\";\n}\n\n.fa-user-plus::before {\n content: \"\\f234\";\n}\n\n.fa-check::before {\n content: \"\\f00c\";\n}\n\n.fa-battery-three-quarters::before {\n content: \"\\f241\";\n}\n\n.fa-battery-4::before {\n content: \"\\f241\";\n}\n\n.fa-house-circle-check::before {\n content: \"\\e509\";\n}\n\n.fa-angle-left::before {\n content: \"\\f104\";\n}\n\n.fa-diagram-successor::before {\n content: \"\\e47a\";\n}\n\n.fa-truck-arrow-right::before {\n content: \"\\e58b\";\n}\n\n.fa-arrows-split-up-and-left::before {\n content: \"\\e4bc\";\n}\n\n.fa-hand-fist::before {\n content: \"\\f6de\";\n}\n\n.fa-fist-raised::before {\n content: \"\\f6de\";\n}\n\n.fa-cloud-moon::before {\n content: \"\\f6c3\";\n}\n\n.fa-briefcase::before {\n content: \"\\f0b1\";\n}\n\n.fa-person-falling::before {\n content: \"\\e546\";\n}\n\n.fa-image-portrait::before {\n content: \"\\f3e0\";\n}\n\n.fa-portrait::before {\n content: \"\\f3e0\";\n}\n\n.fa-user-tag::before {\n content: \"\\f507\";\n}\n\n.fa-rug::before {\n content: \"\\e569\";\n}\n\n.fa-earth-europe::before {\n content: \"\\f7a2\";\n}\n\n.fa-globe-europe::before {\n content: \"\\f7a2\";\n}\n\n.fa-cart-flatbed-suitcase::before {\n content: \"\\f59d\";\n}\n\n.fa-luggage-cart::before {\n content: \"\\f59d\";\n}\n\n.fa-rectangle-xmark::before {\n content: \"\\f410\";\n}\n\n.fa-rectangle-times::before {\n content: \"\\f410\";\n}\n\n.fa-times-rectangle::before {\n content: \"\\f410\";\n}\n\n.fa-window-close::before {\n content: \"\\f410\";\n}\n\n.fa-baht-sign::before {\n content: \"\\e0ac\";\n}\n\n.fa-book-open::before {\n content: \"\\f518\";\n}\n\n.fa-book-journal-whills::before {\n content: \"\\f66a\";\n}\n\n.fa-journal-whills::before {\n content: \"\\f66a\";\n}\n\n.fa-handcuffs::before {\n content: \"\\e4f8\";\n}\n\n.fa-triangle-exclamation::before {\n content: \"\\f071\";\n}\n\n.fa-exclamation-triangle::before {\n content: \"\\f071\";\n}\n\n.fa-warning::before {\n content: \"\\f071\";\n}\n\n.fa-database::before {\n content: \"\\f1c0\";\n}\n\n.fa-share::before {\n content: \"\\f064\";\n}\n\n.fa-mail-forward::before {\n content: \"\\f064\";\n}\n\n.fa-bottle-droplet::before {\n content: \"\\e4c4\";\n}\n\n.fa-mask-face::before {\n content: \"\\e1d7\";\n}\n\n.fa-hill-rockslide::before {\n content: \"\\e508\";\n}\n\n.fa-right-left::before {\n content: \"\\f362\";\n}\n\n.fa-exchange-alt::before {\n content: \"\\f362\";\n}\n\n.fa-paper-plane::before {\n content: \"\\f1d8\";\n}\n\n.fa-road-circle-exclamation::before {\n content: \"\\e565\";\n}\n\n.fa-dungeon::before {\n content: \"\\f6d9\";\n}\n\n.fa-align-right::before {\n content: \"\\f038\";\n}\n\n.fa-money-bill-1-wave::before {\n content: \"\\f53b\";\n}\n\n.fa-money-bill-wave-alt::before {\n content: \"\\f53b\";\n}\n\n.fa-life-ring::before {\n content: \"\\f1cd\";\n}\n\n.fa-hands::before {\n content: \"\\f2a7\";\n}\n\n.fa-sign-language::before {\n content: \"\\f2a7\";\n}\n\n.fa-signing::before {\n content: \"\\f2a7\";\n}\n\n.fa-calendar-day::before {\n content: \"\\f783\";\n}\n\n.fa-water-ladder::before {\n content: \"\\f5c5\";\n}\n\n.fa-ladder-water::before {\n content: \"\\f5c5\";\n}\n\n.fa-swimming-pool::before {\n content: \"\\f5c5\";\n}\n\n.fa-arrows-up-down::before {\n content: \"\\f07d\";\n}\n\n.fa-arrows-v::before {\n content: \"\\f07d\";\n}\n\n.fa-face-grimace::before {\n content: \"\\f57f\";\n}\n\n.fa-grimace::before {\n content: \"\\f57f\";\n}\n\n.fa-wheelchair-move::before {\n content: \"\\e2ce\";\n}\n\n.fa-wheelchair-alt::before {\n content: \"\\e2ce\";\n}\n\n.fa-turn-down::before {\n content: \"\\f3be\";\n}\n\n.fa-level-down-alt::before {\n content: \"\\f3be\";\n}\n\n.fa-person-walking-arrow-right::before {\n content: \"\\e552\";\n}\n\n.fa-square-envelope::before {\n content: \"\\f199\";\n}\n\n.fa-envelope-square::before {\n content: \"\\f199\";\n}\n\n.fa-dice::before {\n content: \"\\f522\";\n}\n\n.fa-bowling-ball::before {\n content: \"\\f436\";\n}\n\n.fa-brain::before {\n content: \"\\f5dc\";\n}\n\n.fa-bandage::before {\n content: \"\\f462\";\n}\n\n.fa-band-aid::before {\n content: \"\\f462\";\n}\n\n.fa-calendar-minus::before {\n content: \"\\f272\";\n}\n\n.fa-circle-xmark::before {\n content: \"\\f057\";\n}\n\n.fa-times-circle::before {\n content: \"\\f057\";\n}\n\n.fa-xmark-circle::before {\n content: \"\\f057\";\n}\n\n.fa-gifts::before {\n content: \"\\f79c\";\n}\n\n.fa-hotel::before {\n content: \"\\f594\";\n}\n\n.fa-earth-asia::before {\n content: \"\\f57e\";\n}\n\n.fa-globe-asia::before {\n content: \"\\f57e\";\n}\n\n.fa-id-card-clip::before {\n content: \"\\f47f\";\n}\n\n.fa-id-card-alt::before {\n content: \"\\f47f\";\n}\n\n.fa-magnifying-glass-plus::before {\n content: \"\\f00e\";\n}\n\n.fa-search-plus::before {\n content: \"\\f00e\";\n}\n\n.fa-thumbs-up::before {\n content: \"\\f164\";\n}\n\n.fa-user-clock::before {\n content: \"\\f4fd\";\n}\n\n.fa-hand-dots::before {\n content: \"\\f461\";\n}\n\n.fa-allergies::before {\n content: \"\\f461\";\n}\n\n.fa-file-invoice::before {\n content: \"\\f570\";\n}\n\n.fa-window-minimize::before {\n content: \"\\f2d1\";\n}\n\n.fa-mug-saucer::before {\n content: \"\\f0f4\";\n}\n\n.fa-coffee::before {\n content: \"\\f0f4\";\n}\n\n.fa-brush::before {\n content: \"\\f55d\";\n}\n\n.fa-mask::before {\n content: \"\\f6fa\";\n}\n\n.fa-magnifying-glass-minus::before {\n content: \"\\f010\";\n}\n\n.fa-search-minus::before {\n content: \"\\f010\";\n}\n\n.fa-ruler-vertical::before {\n content: \"\\f548\";\n}\n\n.fa-user-large::before {\n content: \"\\f406\";\n}\n\n.fa-user-alt::before {\n content: \"\\f406\";\n}\n\n.fa-train-tram::before {\n content: \"\\e5b4\";\n}\n\n.fa-user-nurse::before {\n content: \"\\f82f\";\n}\n\n.fa-syringe::before {\n content: \"\\f48e\";\n}\n\n.fa-cloud-sun::before {\n content: \"\\f6c4\";\n}\n\n.fa-stopwatch-20::before {\n content: \"\\e06f\";\n}\n\n.fa-square-full::before {\n content: \"\\f45c\";\n}\n\n.fa-magnet::before {\n content: \"\\f076\";\n}\n\n.fa-jar::before {\n content: \"\\e516\";\n}\n\n.fa-note-sticky::before {\n content: \"\\f249\";\n}\n\n.fa-sticky-note::before {\n content: \"\\f249\";\n}\n\n.fa-bug-slash::before {\n content: \"\\e490\";\n}\n\n.fa-arrow-up-from-water-pump::before {\n content: \"\\e4b6\";\n}\n\n.fa-bone::before {\n content: \"\\f5d7\";\n}\n\n.fa-user-injured::before {\n content: \"\\f728\";\n}\n\n.fa-face-sad-tear::before {\n content: \"\\f5b4\";\n}\n\n.fa-sad-tear::before {\n content: \"\\f5b4\";\n}\n\n.fa-plane::before {\n content: \"\\f072\";\n}\n\n.fa-tent-arrows-down::before {\n content: \"\\e581\";\n}\n\n.fa-exclamation::before {\n content: \"\\!\";\n}\n\n.fa-arrows-spin::before {\n content: \"\\e4bb\";\n}\n\n.fa-print::before {\n content: \"\\f02f\";\n}\n\n.fa-turkish-lira-sign::before {\n content: \"\\e2bb\";\n}\n\n.fa-try::before {\n content: \"\\e2bb\";\n}\n\n.fa-turkish-lira::before {\n content: \"\\e2bb\";\n}\n\n.fa-dollar-sign::before {\n content: \"\\$\";\n}\n\n.fa-dollar::before {\n content: \"\\$\";\n}\n\n.fa-usd::before {\n content: \"\\$\";\n}\n\n.fa-x::before {\n content: \"X\";\n}\n\n.fa-magnifying-glass-dollar::before {\n content: \"\\f688\";\n}\n\n.fa-search-dollar::before {\n content: \"\\f688\";\n}\n\n.fa-users-gear::before {\n content: \"\\f509\";\n}\n\n.fa-users-cog::before {\n content: \"\\f509\";\n}\n\n.fa-person-military-pointing::before {\n content: \"\\e54a\";\n}\n\n.fa-building-columns::before {\n content: \"\\f19c\";\n}\n\n.fa-bank::before {\n content: \"\\f19c\";\n}\n\n.fa-institution::before {\n content: \"\\f19c\";\n}\n\n.fa-museum::before {\n content: \"\\f19c\";\n}\n\n.fa-university::before {\n content: \"\\f19c\";\n}\n\n.fa-umbrella::before {\n content: \"\\f0e9\";\n}\n\n.fa-trowel::before {\n content: \"\\e589\";\n}\n\n.fa-d::before {\n content: \"D\";\n}\n\n.fa-stapler::before {\n content: \"\\e5af\";\n}\n\n.fa-masks-theater::before {\n content: \"\\f630\";\n}\n\n.fa-theater-masks::before {\n content: \"\\f630\";\n}\n\n.fa-kip-sign::before {\n content: \"\\e1c4\";\n}\n\n.fa-hand-point-left::before {\n content: \"\\f0a5\";\n}\n\n.fa-handshake-simple::before {\n content: \"\\f4c6\";\n}\n\n.fa-handshake-alt::before {\n content: \"\\f4c6\";\n}\n\n.fa-jet-fighter::before {\n content: \"\\f0fb\";\n}\n\n.fa-fighter-jet::before {\n content: \"\\f0fb\";\n}\n\n.fa-square-share-nodes::before {\n content: \"\\f1e1\";\n}\n\n.fa-share-alt-square::before {\n content: \"\\f1e1\";\n}\n\n.fa-barcode::before {\n content: \"\\f02a\";\n}\n\n.fa-plus-minus::before {\n content: \"\\e43c\";\n}\n\n.fa-video::before {\n content: \"\\f03d\";\n}\n\n.fa-video-camera::before {\n content: \"\\f03d\";\n}\n\n.fa-graduation-cap::before {\n content: \"\\f19d\";\n}\n\n.fa-mortar-board::before {\n content: \"\\f19d\";\n}\n\n.fa-hand-holding-medical::before {\n content: \"\\e05c\";\n}\n\n.fa-person-circle-check::before {\n content: \"\\e53e\";\n}\n\n.fa-turn-up::before {\n content: \"\\f3bf\";\n}\n\n.fa-level-up-alt::before {\n content: \"\\f3bf\";\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n --fa-style-family-classic: \"Font Awesome 6 Free\";\n --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n font-family: \"Font Awesome 6 Free\";\n font-style: normal;\n font-weight: 900;\n font-display: block;\n src: url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\");\n}\n.fas,\n.fa-solid {\n font-weight: 900;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n --fa-style-family-classic: \"Font Awesome 6 Free\";\n --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n font-family: \"Font Awesome 6 Free\";\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\");\n}\n.far,\n.fa-regular {\n font-weight: 400;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n --fa-style-family-brands: \"Font Awesome 6 Brands\";\n --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\";\n}\n\n@font-face {\n font-family: \"Font Awesome 6 Brands\";\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\");\n}\n.fab,\n.fa-brands {\n font-weight: 400;\n}\n\n.fa-monero:before {\n content: \"\\f3d0\";\n}\n\n.fa-hooli:before {\n content: \"\\f427\";\n}\n\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n\n.fa-shopware:before {\n content: \"\\f5b5\";\n}\n\n.fa-creative-commons-nc:before {\n content: \"\\f4e8\";\n}\n\n.fa-aws:before {\n content: \"\\f375\";\n}\n\n.fa-redhat:before {\n content: \"\\f7bc\";\n}\n\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n\n.fa-cloudflare:before {\n content: \"\\e07d\";\n}\n\n.fa-ups:before {\n content: \"\\f7e0\";\n}\n\n.fa-pixiv:before {\n content: \"\\e640\";\n}\n\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n\n.fa-dyalog:before {\n content: \"\\f399\";\n}\n\n.fa-bity:before {\n content: \"\\f37a\";\n}\n\n.fa-stackpath:before {\n content: \"\\f842\";\n}\n\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n\n.fa-modx:before {\n content: \"\\f285\";\n}\n\n.fa-guilded:before {\n content: \"\\e07e\";\n}\n\n.fa-vnv:before {\n content: \"\\f40b\";\n}\n\n.fa-square-js:before {\n content: \"\\f3b9\";\n}\n\n.fa-js-square:before {\n content: \"\\f3b9\";\n}\n\n.fa-microsoft:before {\n content: \"\\f3ca\";\n}\n\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n\n.fa-orcid:before {\n content: \"\\f8d2\";\n}\n\n.fa-java:before {\n content: \"\\f4e4\";\n}\n\n.fa-invision:before {\n content: \"\\f7b0\";\n}\n\n.fa-creative-commons-pd-alt:before {\n content: \"\\f4ed\";\n}\n\n.fa-centercode:before {\n content: \"\\f380\";\n}\n\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n\n.fa-jxl:before {\n content: \"\\e67b\";\n}\n\n.fa-hire-a-helper:before {\n content: \"\\f3b0\";\n}\n\n.fa-creative-commons-by:before {\n content: \"\\f4e7\";\n}\n\n.fa-unity:before {\n content: \"\\e049\";\n}\n\n.fa-whmcs:before {\n content: \"\\f40d\";\n}\n\n.fa-rocketchat:before {\n content: \"\\f3e8\";\n}\n\n.fa-vk:before {\n content: \"\\f189\";\n}\n\n.fa-untappd:before {\n content: \"\\f405\";\n}\n\n.fa-mailchimp:before {\n content: \"\\f59e\";\n}\n\n.fa-css3-alt:before {\n content: \"\\f38b\";\n}\n\n.fa-square-reddit:before {\n content: \"\\f1a2\";\n}\n\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n\n.fa-vimeo-v:before {\n content: \"\\f27d\";\n}\n\n.fa-contao:before {\n content: \"\\f26d\";\n}\n\n.fa-square-font-awesome:before {\n content: \"\\e5ad\";\n}\n\n.fa-deskpro:before {\n content: \"\\f38f\";\n}\n\n.fa-brave:before {\n content: \"\\e63c\";\n}\n\n.fa-sistrix:before {\n content: \"\\f3ee\";\n}\n\n.fa-square-instagram:before {\n content: \"\\e055\";\n}\n\n.fa-instagram-square:before {\n content: \"\\e055\";\n}\n\n.fa-battle-net:before {\n content: \"\\f835\";\n}\n\n.fa-the-red-yeti:before {\n content: \"\\f69d\";\n}\n\n.fa-square-hacker-news:before {\n content: \"\\f3af\";\n}\n\n.fa-hacker-news-square:before {\n content: \"\\f3af\";\n}\n\n.fa-edge:before {\n content: \"\\f282\";\n}\n\n.fa-threads:before {\n content: \"\\e618\";\n}\n\n.fa-napster:before {\n content: \"\\f3d2\";\n}\n\n.fa-square-snapchat:before {\n content: \"\\f2ad\";\n}\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n\n.fa-google-plus-g:before {\n content: \"\\f0d5\";\n}\n\n.fa-artstation:before {\n content: \"\\f77a\";\n}\n\n.fa-markdown:before {\n content: \"\\f60f\";\n}\n\n.fa-sourcetree:before {\n content: \"\\f7d3\";\n}\n\n.fa-google-plus:before {\n content: \"\\f2b3\";\n}\n\n.fa-diaspora:before {\n content: \"\\f791\";\n}\n\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n\n.fa-phoenix-squadron:before {\n content: \"\\f511\";\n}\n\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n\n.fa-algolia:before {\n content: \"\\f36c\";\n}\n\n.fa-red-river:before {\n content: \"\\f3e3\";\n}\n\n.fa-creative-commons-sa:before {\n content: \"\\f4ef\";\n}\n\n.fa-safari:before {\n content: \"\\f267\";\n}\n\n.fa-google:before {\n content: \"\\f1a0\";\n}\n\n.fa-square-font-awesome-stroke:before {\n content: \"\\f35c\";\n}\n\n.fa-font-awesome-alt:before {\n content: \"\\f35c\";\n}\n\n.fa-atlassian:before {\n content: \"\\f77b\";\n}\n\n.fa-linkedin-in:before {\n content: \"\\f0e1\";\n}\n\n.fa-digital-ocean:before {\n content: \"\\f391\";\n}\n\n.fa-nimblr:before {\n content: \"\\f5a8\";\n}\n\n.fa-chromecast:before {\n content: \"\\f838\";\n}\n\n.fa-evernote:before {\n content: \"\\f839\";\n}\n\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n\n.fa-creative-commons-sampling:before {\n content: \"\\f4f0\";\n}\n\n.fa-adversal:before {\n content: \"\\f36a\";\n}\n\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n\n.fa-watchman-monitoring:before {\n content: \"\\e087\";\n}\n\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n\n.fa-git-alt:before {\n content: \"\\f841\";\n}\n\n.fa-lyft:before {\n content: \"\\f3c3\";\n}\n\n.fa-rev:before {\n content: \"\\f5b2\";\n}\n\n.fa-windows:before {\n content: \"\\f17a\";\n}\n\n.fa-wizards-of-the-coast:before {\n content: \"\\f730\";\n}\n\n.fa-square-viadeo:before {\n content: \"\\f2aa\";\n}\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n\n.fa-centos:before {\n content: \"\\f789\";\n}\n\n.fa-adn:before {\n content: \"\\f170\";\n}\n\n.fa-cloudsmith:before {\n content: \"\\f384\";\n}\n\n.fa-opensuse:before {\n content: \"\\e62b\";\n}\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n\n.fa-square-dribbble:before {\n content: \"\\f397\";\n}\n\n.fa-dribbble-square:before {\n content: \"\\f397\";\n}\n\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n\n.fa-node:before {\n content: \"\\f419\";\n}\n\n.fa-mix:before {\n content: \"\\f3cb\";\n}\n\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n\n.fa-cc-apple-pay:before {\n content: \"\\f416\";\n}\n\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n\n.fa-debian:before {\n content: \"\\e60b\";\n}\n\n.fa-openid:before {\n content: \"\\f19b\";\n}\n\n.fa-instalod:before {\n content: \"\\e081\";\n}\n\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n\n.fa-sellcast:before {\n content: \"\\f2da\";\n}\n\n.fa-square-twitter:before {\n content: \"\\f081\";\n}\n\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n\n.fa-r-project:before {\n content: \"\\f4f7\";\n}\n\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n\n.fa-freebsd:before {\n content: \"\\f3a4\";\n}\n\n.fa-vuejs:before {\n content: \"\\f41f\";\n}\n\n.fa-accusoft:before {\n content: \"\\f369\";\n}\n\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n\n.fa-fonticons-fi:before {\n content: \"\\f3a2\";\n}\n\n.fa-app-store:before {\n content: \"\\f36f\";\n}\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n\n.fa-itunes-note:before {\n content: \"\\f3b5\";\n}\n\n.fa-golang:before {\n content: \"\\e40f\";\n}\n\n.fa-kickstarter:before {\n content: \"\\f3bb\";\n}\n\n.fa-square-kickstarter:before {\n content: \"\\f3bb\";\n}\n\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n\n.fa-uncharted:before {\n content: \"\\e084\";\n}\n\n.fa-firstdraft:before {\n content: \"\\f3a1\";\n}\n\n.fa-square-youtube:before {\n content: \"\\f431\";\n}\n\n.fa-youtube-square:before {\n content: \"\\f431\";\n}\n\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n\n.fa-wpressr:before {\n content: \"\\f3e4\";\n}\n\n.fa-rendact:before {\n content: \"\\f3e4\";\n}\n\n.fa-angellist:before {\n content: \"\\f209\";\n}\n\n.fa-galactic-republic:before {\n content: \"\\f50c\";\n}\n\n.fa-nfc-directional:before {\n content: \"\\e530\";\n}\n\n.fa-skype:before {\n content: \"\\f17e\";\n}\n\n.fa-joget:before {\n content: \"\\f3b7\";\n}\n\n.fa-fedora:before {\n content: \"\\f798\";\n}\n\n.fa-stripe-s:before {\n content: \"\\f42a\";\n}\n\n.fa-meta:before {\n content: \"\\e49b\";\n}\n\n.fa-laravel:before {\n content: \"\\f3bd\";\n}\n\n.fa-hotjar:before {\n content: \"\\f3b1\";\n}\n\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n\n.fa-square-letterboxd:before {\n content: \"\\e62e\";\n}\n\n.fa-sticker-mule:before {\n content: \"\\f3f7\";\n}\n\n.fa-creative-commons-zero:before {\n content: \"\\f4f3\";\n}\n\n.fa-hips:before {\n content: \"\\f452\";\n}\n\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n\n.fa-discord:before {\n content: \"\\f392\";\n}\n\n.fa-chrome:before {\n content: \"\\f268\";\n}\n\n.fa-app-store-ios:before {\n content: \"\\f370\";\n}\n\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n\n.fa-confluence:before {\n content: \"\\f78d\";\n}\n\n.fa-shoelace:before {\n content: \"\\e60c\";\n}\n\n.fa-mdb:before {\n content: \"\\f8ca\";\n}\n\n.fa-dochub:before {\n content: \"\\f394\";\n}\n\n.fa-accessible-icon:before {\n content: \"\\f368\";\n}\n\n.fa-ebay:before {\n content: \"\\f4f4\";\n}\n\n.fa-amazon:before {\n content: \"\\f270\";\n}\n\n.fa-unsplash:before {\n content: \"\\e07c\";\n}\n\n.fa-yarn:before {\n content: \"\\f7e3\";\n}\n\n.fa-square-steam:before {\n content: \"\\f1b7\";\n}\n\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n\n.fa-500px:before {\n content: \"\\f26e\";\n}\n\n.fa-square-vimeo:before {\n content: \"\\f194\";\n}\n\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n\n.fa-asymmetrik:before {\n content: \"\\f372\";\n}\n\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n\n.fa-font-awesome-flag:before {\n content: \"\\f2b4\";\n}\n\n.fa-font-awesome-logo-full:before {\n content: \"\\f2b4\";\n}\n\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n\n.fa-apple:before {\n content: \"\\f179\";\n}\n\n.fa-hive:before {\n content: \"\\e07f\";\n}\n\n.fa-gitkraken:before {\n content: \"\\f3a6\";\n}\n\n.fa-keybase:before {\n content: \"\\f4f5\";\n}\n\n.fa-apple-pay:before {\n content: \"\\f415\";\n}\n\n.fa-padlet:before {\n content: \"\\e4a0\";\n}\n\n.fa-amazon-pay:before {\n content: \"\\f42c\";\n}\n\n.fa-square-github:before {\n content: \"\\f092\";\n}\n\n.fa-github-square:before {\n content: \"\\f092\";\n}\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n\n.fa-fedex:before {\n content: \"\\f797\";\n}\n\n.fa-phoenix-framework:before {\n content: \"\\f3dc\";\n}\n\n.fa-shopify:before {\n content: \"\\e057\";\n}\n\n.fa-neos:before {\n content: \"\\f612\";\n}\n\n.fa-square-threads:before {\n content: \"\\e619\";\n}\n\n.fa-hackerrank:before {\n content: \"\\f5f7\";\n}\n\n.fa-researchgate:before {\n content: \"\\f4f8\";\n}\n\n.fa-swift:before {\n content: \"\\f8e1\";\n}\n\n.fa-angular:before {\n content: \"\\f420\";\n}\n\n.fa-speakap:before {\n content: \"\\f3f3\";\n}\n\n.fa-angrycreative:before {\n content: \"\\f36e\";\n}\n\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n\n.fa-envira:before {\n content: \"\\f299\";\n}\n\n.fa-google-scholar:before {\n content: \"\\e63b\";\n}\n\n.fa-square-gitlab:before {\n content: \"\\e5ae\";\n}\n\n.fa-gitlab-square:before {\n content: \"\\e5ae\";\n}\n\n.fa-studiovinari:before {\n content: \"\\f3f8\";\n}\n\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n\n.fa-firefox:before {\n content: \"\\f269\";\n}\n\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n\n.fa-goodreads:before {\n content: \"\\f3a8\";\n}\n\n.fa-square-odnoklassniki:before {\n content: \"\\f264\";\n}\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n\n.fa-sith:before {\n content: \"\\f512\";\n}\n\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n\n.fa-page4:before {\n content: \"\\f3d7\";\n}\n\n.fa-hashnode:before {\n content: \"\\e499\";\n}\n\n.fa-react:before {\n content: \"\\f41b\";\n}\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n\n.fa-squarespace:before {\n content: \"\\f5be\";\n}\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n\n.fa-creative-commons-share:before {\n content: \"\\f4f2\";\n}\n\n.fa-bitcoin:before {\n content: \"\\f379\";\n}\n\n.fa-keycdn:before {\n content: \"\\f3ba\";\n}\n\n.fa-opera:before {\n content: \"\\f26a\";\n}\n\n.fa-itch-io:before {\n content: \"\\f83a\";\n}\n\n.fa-umbraco:before {\n content: \"\\f8e8\";\n}\n\n.fa-galactic-senate:before {\n content: \"\\f50d\";\n}\n\n.fa-ubuntu:before {\n content: \"\\f7df\";\n}\n\n.fa-draft2digital:before {\n content: \"\\f396\";\n}\n\n.fa-stripe:before {\n content: \"\\f429\";\n}\n\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n\n.fa-gg:before {\n content: \"\\f260\";\n}\n\n.fa-dhl:before {\n content: \"\\f790\";\n}\n\n.fa-square-pinterest:before {\n content: \"\\f0d3\";\n}\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n\n.fa-xing:before {\n content: \"\\f168\";\n}\n\n.fa-blackberry:before {\n content: \"\\f37b\";\n}\n\n.fa-creative-commons-pd:before {\n content: \"\\f4ec\";\n}\n\n.fa-playstation:before {\n content: \"\\f3df\";\n}\n\n.fa-quinscape:before {\n content: \"\\f459\";\n}\n\n.fa-less:before {\n content: \"\\f41d\";\n}\n\n.fa-blogger-b:before {\n content: \"\\f37d\";\n}\n\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n\n.fa-signal-messenger:before {\n content: \"\\e663\";\n}\n\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n\n.fa-typo3:before {\n content: \"\\f42b\";\n}\n\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n\n.fa-dailymotion:before {\n content: \"\\e052\";\n}\n\n.fa-affiliatetheme:before {\n content: \"\\f36b\";\n}\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n\n.fa-bootstrap:before {\n content: \"\\f836\";\n}\n\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n\n.fa-nfc-symbol:before {\n content: \"\\e531\";\n}\n\n.fa-mintbit:before {\n content: \"\\e62f\";\n}\n\n.fa-ethereum:before {\n content: \"\\f42e\";\n}\n\n.fa-speaker-deck:before {\n content: \"\\f83c\";\n}\n\n.fa-creative-commons-nc-eu:before {\n content: \"\\f4e9\";\n}\n\n.fa-patreon:before {\n content: \"\\f3d9\";\n}\n\n.fa-avianex:before {\n content: \"\\f374\";\n}\n\n.fa-ello:before {\n content: \"\\f5f1\";\n}\n\n.fa-gofore:before {\n content: \"\\f3a7\";\n}\n\n.fa-bimobject:before {\n content: \"\\f378\";\n}\n\n.fa-brave-reverse:before {\n content: \"\\e63d\";\n}\n\n.fa-facebook-f:before {\n content: \"\\f39e\";\n}\n\n.fa-square-google-plus:before {\n content: \"\\f0d4\";\n}\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n\n.fa-web-awesome:before {\n content: \"\\e682\";\n}\n\n.fa-mandalorian:before {\n content: \"\\f50f\";\n}\n\n.fa-first-order-alt:before {\n content: \"\\f50a\";\n}\n\n.fa-osi:before {\n content: \"\\f41a\";\n}\n\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n\n.fa-d-and-d-beyond:before {\n content: \"\\f6ca\";\n}\n\n.fa-periscope:before {\n content: \"\\f3da\";\n}\n\n.fa-fulcrum:before {\n content: \"\\f50b\";\n}\n\n.fa-cloudscale:before {\n content: \"\\f383\";\n}\n\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n\n.fa-mizuni:before {\n content: \"\\f3cc\";\n}\n\n.fa-schlix:before {\n content: \"\\f3ea\";\n}\n\n.fa-square-xing:before {\n content: \"\\f169\";\n}\n\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n\n.fa-cloudversify:before {\n content: \"\\f385\";\n}\n\n.fa-usps:before {\n content: \"\\f7e1\";\n}\n\n.fa-megaport:before {\n content: \"\\f5a3\";\n}\n\n.fa-magento:before {\n content: \"\\f3c4\";\n}\n\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n\n.fa-fly:before {\n content: \"\\f417\";\n}\n\n.fa-aviato:before {\n content: \"\\f421\";\n}\n\n.fa-itunes:before {\n content: \"\\f3b4\";\n}\n\n.fa-cuttlefish:before {\n content: \"\\f38c\";\n}\n\n.fa-blogger:before {\n content: \"\\f37c\";\n}\n\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n\n.fa-viber:before {\n content: \"\\f409\";\n}\n\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n\n.fa-letterboxd:before {\n content: \"\\e62d\";\n}\n\n.fa-symfony:before {\n content: \"\\f83d\";\n}\n\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n\n.fa-facebook-messenger:before {\n content: \"\\f39f\";\n}\n\n.fa-audible:before {\n content: \"\\f373\";\n}\n\n.fa-think-peaks:before {\n content: \"\\f731\";\n}\n\n.fa-bilibili:before {\n content: \"\\e3d9\";\n}\n\n.fa-erlang:before {\n content: \"\\f39d\";\n}\n\n.fa-x-twitter:before {\n content: \"\\e61b\";\n}\n\n.fa-cotton-bureau:before {\n content: \"\\f89e\";\n}\n\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n\n.fa-42-group:before {\n content: \"\\e080\";\n}\n\n.fa-innosoft:before {\n content: \"\\e080\";\n}\n\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n\n.fa-elementor:before {\n content: \"\\f430\";\n}\n\n.fa-square-pied-piper:before {\n content: \"\\e01e\";\n}\n\n.fa-pied-piper-square:before {\n content: \"\\e01e\";\n}\n\n.fa-creative-commons-nd:before {\n content: \"\\f4eb\";\n}\n\n.fa-palfed:before {\n content: \"\\f3d8\";\n}\n\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n\n.fa-resolving:before {\n content: \"\\f3e7\";\n}\n\n.fa-xbox:before {\n content: \"\\f412\";\n}\n\n.fa-square-web-awesome-stroke:before {\n content: \"\\e684\";\n}\n\n.fa-searchengin:before {\n content: \"\\f3eb\";\n}\n\n.fa-tiktok:before {\n content: \"\\e07b\";\n}\n\n.fa-square-facebook:before {\n content: \"\\f082\";\n}\n\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n\n.fa-renren:before {\n content: \"\\f18b\";\n}\n\n.fa-linux:before {\n content: \"\\f17c\";\n}\n\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n\n.fa-linkedin:before {\n content: \"\\f08c\";\n}\n\n.fa-hubspot:before {\n content: \"\\f3b2\";\n}\n\n.fa-deploydog:before {\n content: \"\\f38e\";\n}\n\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n\n.fa-mixer:before {\n content: \"\\e056\";\n}\n\n.fa-square-lastfm:before {\n content: \"\\f203\";\n}\n\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n\n.fa-vimeo:before {\n content: \"\\f40a\";\n}\n\n.fa-mendeley:before {\n content: \"\\f7b3\";\n}\n\n.fa-uniregistry:before {\n content: \"\\f404\";\n}\n\n.fa-figma:before {\n content: \"\\f799\";\n}\n\n.fa-creative-commons-remix:before {\n content: \"\\f4ee\";\n}\n\n.fa-cc-amazon-pay:before {\n content: \"\\f42d\";\n}\n\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n\n.fa-cmplid:before {\n content: \"\\e360\";\n}\n\n.fa-upwork:before {\n content: \"\\e641\";\n}\n\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n\n.fa-gripfire:before {\n content: \"\\f3ac\";\n}\n\n.fa-jedi-order:before {\n content: \"\\f50e\";\n}\n\n.fa-uikit:before {\n content: \"\\f403\";\n}\n\n.fa-fort-awesome-alt:before {\n content: \"\\f3a3\";\n}\n\n.fa-phabricator:before {\n content: \"\\f3db\";\n}\n\n.fa-ussunnah:before {\n content: \"\\f407\";\n}\n\n.fa-earlybirds:before {\n content: \"\\f39a\";\n}\n\n.fa-trade-federation:before {\n content: \"\\f513\";\n}\n\n.fa-autoprefixer:before {\n content: \"\\f41c\";\n}\n\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n\n.fa-square-upwork:before {\n content: \"\\e67c\";\n}\n\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n\n.fa-google-play:before {\n content: \"\\f3ab\";\n}\n\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n\n.fa-line:before {\n content: \"\\f3c0\";\n}\n\n.fa-google-drive:before {\n content: \"\\f3aa\";\n}\n\n.fa-servicestack:before {\n content: \"\\f3ec\";\n}\n\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n\n.fa-deezer:before {\n content: \"\\e077\";\n}\n\n.fa-raspberry-pi:before {\n content: \"\\f7bb\";\n}\n\n.fa-jira:before {\n content: \"\\f7b1\";\n}\n\n.fa-docker:before {\n content: \"\\f395\";\n}\n\n.fa-screenpal:before {\n content: \"\\e570\";\n}\n\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n\n.fa-gitter:before {\n content: \"\\f426\";\n}\n\n.fa-d-and-d:before {\n content: \"\\f38d\";\n}\n\n.fa-microblog:before {\n content: \"\\e01a\";\n}\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n\n.fa-pied-piper-hat:before {\n content: \"\\f4e5\";\n}\n\n.fa-kickstarter-k:before {\n content: \"\\f3bc\";\n}\n\n.fa-yandex:before {\n content: \"\\f413\";\n}\n\n.fa-readme:before {\n content: \"\\f4d5\";\n}\n\n.fa-html5:before {\n content: \"\\f13b\";\n}\n\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n\n.fa-square-web-awesome:before {\n content: \"\\e683\";\n}\n\n.fa-sass:before {\n content: \"\\f41e\";\n}\n\n.fa-wirsindhandwerk:before {\n content: \"\\e2d0\";\n}\n\n.fa-wsh:before {\n content: \"\\e2d0\";\n}\n\n.fa-buromobelexperte:before {\n content: \"\\f37f\";\n}\n\n.fa-salesforce:before {\n content: \"\\f83b\";\n}\n\n.fa-octopus-deploy:before {\n content: \"\\e082\";\n}\n\n.fa-medapps:before {\n content: \"\\f3c6\";\n}\n\n.fa-ns8:before {\n content: \"\\f3d5\";\n}\n\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n\n.fa-apper:before {\n content: \"\\f371\";\n}\n\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n\n.fa-waze:before {\n content: \"\\f83f\";\n}\n\n.fa-bluesky:before {\n content: \"\\e671\";\n}\n\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ab\";\n}\n\n.fa-fantasy-flight-games:before {\n content: \"\\f6dc\";\n}\n\n.fa-rust:before {\n content: \"\\e07a\";\n}\n\n.fa-wix:before {\n content: \"\\f5cf\";\n}\n\n.fa-square-behance:before {\n content: \"\\f1b5\";\n}\n\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n\n.fa-supple:before {\n content: \"\\f3f9\";\n}\n\n.fa-webflow:before {\n content: \"\\e65c\";\n}\n\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n\n.fa-css3:before {\n content: \"\\f13c\";\n}\n\n.fa-staylinked:before {\n content: \"\\f3f5\";\n}\n\n.fa-kaggle:before {\n content: \"\\f5fa\";\n}\n\n.fa-space-awesome:before {\n content: \"\\e5ac\";\n}\n\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n\n.fa-cpanel:before {\n content: \"\\f388\";\n}\n\n.fa-goodreads-g:before {\n content: \"\\f3a9\";\n}\n\n.fa-square-git:before {\n content: \"\\f1d2\";\n}\n\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n\n.fa-square-tumblr:before {\n content: \"\\f174\";\n}\n\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n\n.fa-trello:before {\n content: \"\\f181\";\n}\n\n.fa-creative-commons-nc-jp:before {\n content: \"\\f4ea\";\n}\n\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n\n.fa-perbyte:before {\n content: \"\\e083\";\n}\n\n.fa-grunt:before {\n content: \"\\f3ad\";\n}\n\n.fa-weebly:before {\n content: \"\\f5cc\";\n}\n\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n\n.fa-themeco:before {\n content: \"\\f5c6\";\n}\n\n.fa-python:before {\n content: \"\\f3e2\";\n}\n\n.fa-android:before {\n content: \"\\f17b\";\n}\n\n.fa-bots:before {\n content: \"\\e340\";\n}\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n\n.fa-hornbill:before {\n content: \"\\f592\";\n}\n\n.fa-js:before {\n content: \"\\f3b8\";\n}\n\n.fa-ideal:before {\n content: \"\\e013\";\n}\n\n.fa-git:before {\n content: \"\\f1d3\";\n}\n\n.fa-dev:before {\n content: \"\\f6cc\";\n}\n\n.fa-sketch:before {\n content: \"\\f7c6\";\n}\n\n.fa-yandex-international:before {\n content: \"\\f414\";\n}\n\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n\n.fa-uber:before {\n content: \"\\f402\";\n}\n\n.fa-github:before {\n content: \"\\f09b\";\n}\n\n.fa-php:before {\n content: \"\\f457\";\n}\n\n.fa-alipay:before {\n content: \"\\f642\";\n}\n\n.fa-youtube:before {\n content: \"\\f167\";\n}\n\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n\n.fa-firefox-browser:before {\n content: \"\\e007\";\n}\n\n.fa-replyd:before {\n content: \"\\f3e6\";\n}\n\n.fa-suse:before {\n content: \"\\f7d6\";\n}\n\n.fa-jenkins:before {\n content: \"\\f3b6\";\n}\n\n.fa-twitter:before {\n content: \"\\f099\";\n}\n\n.fa-rockrms:before {\n content: \"\\f3e9\";\n}\n\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n\n.fa-buffer:before {\n content: \"\\f837\";\n}\n\n.fa-npm:before {\n content: \"\\f3d4\";\n}\n\n.fa-yammer:before {\n content: \"\\f840\";\n}\n\n.fa-btc:before {\n content: \"\\f15a\";\n}\n\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n\n.fa-stubber:before {\n content: \"\\e5c7\";\n}\n\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n\n.fa-telegram-plane:before {\n content: \"\\f2c6\";\n}\n\n.fa-old-republic:before {\n content: \"\\f510\";\n}\n\n.fa-odysee:before {\n content: \"\\e5c6\";\n}\n\n.fa-square-whatsapp:before {\n content: \"\\f40c\";\n}\n\n.fa-whatsapp-square:before {\n content: \"\\f40c\";\n}\n\n.fa-node-js:before {\n content: \"\\f3d3\";\n}\n\n.fa-edge-legacy:before {\n content: \"\\e078\";\n}\n\n.fa-slack:before {\n content: \"\\f198\";\n}\n\n.fa-slack-hash:before {\n content: \"\\f198\";\n}\n\n.fa-medrt:before {\n content: \"\\f3c8\";\n}\n\n.fa-usb:before {\n content: \"\\f287\";\n}\n\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n\n.fa-vaadin:before {\n content: \"\\f408\";\n}\n\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n\n.fa-square-x-twitter:before {\n content: \"\\e61a\";\n}\n\n.fa-reacteurope:before {\n content: \"\\f75d\";\n}\n\n.fa-medium:before {\n content: \"\\f23a\";\n}\n\n.fa-medium-m:before {\n content: \"\\f23a\";\n}\n\n.fa-amilia:before {\n content: \"\\f36d\";\n}\n\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n\n.fa-flipboard:before {\n content: \"\\f44d\";\n}\n\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n\n.fa-critical-role:before {\n content: \"\\f6c9\";\n}\n\n.fa-sitrox:before {\n content: \"\\e44a\";\n}\n\n.fa-discourse:before {\n content: \"\\f393\";\n}\n\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n\n.fa-mastodon:before {\n content: \"\\f4f6\";\n}\n\n.fa-airbnb:before {\n content: \"\\f834\";\n}\n\n.fa-wolf-pack-battalion:before {\n content: \"\\f514\";\n}\n\n.fa-buy-n-large:before {\n content: \"\\f8a6\";\n}\n\n.fa-gulp:before {\n content: \"\\f3ae\";\n}\n\n.fa-creative-commons-sampling-plus:before {\n content: \"\\f4f1\";\n}\n\n.fa-strava:before {\n content: \"\\f428\";\n}\n\n.fa-ember:before {\n content: \"\\f423\";\n}\n\n.fa-canadian-maple-leaf:before {\n content: \"\\f785\";\n}\n\n.fa-teamspeak:before {\n content: \"\\f4f9\";\n}\n\n.fa-pushed:before {\n content: \"\\f3e1\";\n}\n\n.fa-wordpress-simple:before {\n content: \"\\f411\";\n}\n\n.fa-nutritionix:before {\n content: \"\\f3d6\";\n}\n\n.fa-wodu:before {\n content: \"\\e088\";\n}\n\n.fa-google-pay:before {\n content: \"\\e079\";\n}\n\n.fa-intercom:before {\n content: \"\\f7af\";\n}\n\n.fa-zhihu:before {\n content: \"\\f63f\";\n}\n\n.fa-korvue:before {\n content: \"\\f42f\";\n}\n\n.fa-pix:before {\n content: \"\\e43a\";\n}\n\n.fa-steam-symbol:before {\n content: \"\\f3f6\";\n}\n\nhtml {\n /*****************************************************************************\n * Overall Layout Variables\n */\n --pst-header-height: 4rem;\n --pst-header-article-height: calc(var(--pst-header-height) * 2 / 3);\n --pst-sidebar-secondary: 17rem;\n}\n\n/*******************************************************************************\n* Breakpoints that trigger UI changes\n*\n* Note that media-breakpoint-down begins at the next highest level!\n* So we should choose a media-breakpoint-down one *lower* than when we want to start\n* example: media-breakpoint-up(md) and media-breakpoint-down(sm) trigger at the same time\n* ref: https://github.com/twbs/bootstrap/issues/31214\n*/\n/*******************************************************************************\n* Define the animation behaviour\n*/\n/*******************************************************************************\n* UI shaping and padding\n*/\nhtml {\n /*****************************************************************************\n * Font features used in this theme\n */\n --pst-font-size-base: 1rem;\n --pst-font-size-h1: 2.625rem;\n --pst-font-size-h2: 2.125rem;\n --pst-font-size-h3: 1.75rem;\n --pst-font-size-h4: 1.5rem;\n --pst-font-size-h5: 1.25rem;\n --pst-font-size-h6: 1rem;\n --pst-font-size-milli: 0.9rem;\n --pst-sidebar-font-size: 0.9rem;\n --pst-sidebar-font-size-mobile: 1.1rem;\n --pst-sidebar-header-font-size: 1.2rem;\n --pst-sidebar-header-font-weight: 600;\n --pst-admonition-font-weight-heading: 600;\n --pst-font-weight-caption: 300;\n --pst-font-weight-heading: 600;\n --pst-font-family-base-system: -apple-system, \"BlinkMacSystemFont\", \"Segoe UI\",\n \"Helvetica Neue\", \"Arial\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\";\n --pst-font-family-monospace-system: \"SFMono-Regular\", \"Menlo\", \"Consolas\",\n \"Monaco\", \"Liberation Mono\", \"Lucida Console\", monospace;\n --pst-font-family-base: var(--pst-font-family-base-system);\n --pst-font-family-heading: var(--pst-font-family-base-system);\n --pst-font-family-monospace: var(--pst-font-family-monospace-system);\n}\n\nhtml {\n /*****************************************************************************\n * Icon\n */\n --pst-font-size-icon: 1.5rem;\n --pst-icon-check-circle: \"\";\n --pst-icon-info-circle: \"\";\n --pst-icon-exclamation-triangle: \"\";\n --pst-icon-exclamation-circle: \"\";\n --pst-icon-times-circle: \"\";\n --pst-icon-lightbulb: \"\";\n --pst-icon-download: \"\";\n --pst-icon-angle-left: \"\";\n --pst-icon-angle-right: \"\";\n --pst-icon-external-link: \"\";\n --pst-icon-search-minus: \"\";\n --pst-icon-github: \"\";\n --pst-icon-gitlab: \"\";\n --pst-icon-share: \"\";\n --pst-icon-bell: \"\";\n --pst-icon-pencil: \"\";\n --pst-breadcrumb-divider: \"\";\n}\n\nhtml {\n /*****************************************************************************\n * Admonitions\n **/\n --pst-icon-admonition-default: var(--pst-icon-bell);\n --pst-icon-admonition-note: var(--pst-icon-info-circle);\n --pst-icon-admonition-attention: var(--pst-icon-exclamation-circle);\n --pst-icon-admonition-caution: var(--pst-icon-exclamation-triangle);\n --pst-icon-admonition-warning: var(--pst-icon-exclamation-triangle);\n --pst-icon-admonition-danger: var(--pst-icon-exclamation-triangle);\n --pst-icon-admonition-error: var(--pst-icon-times-circle);\n --pst-icon-admonition-hint: var(--pst-icon-lightbulb);\n --pst-icon-admonition-tip: var(--pst-icon-lightbulb);\n --pst-icon-admonition-important: var(--pst-icon-exclamation-circle);\n --pst-icon-admonition-seealso: var(--pst-icon-share);\n --pst-icon-admonition-todo: var(--pst-icon-pencil);\n}\n\nhtml {\n /*****************************************************************************\n * versionmodified\n **/\n --pst-icon-versionmodified-default: var(--pst-icon-exclamation-circle);\n --pst-icon-versionmodified-added: var(--pst-icon-exclamation-circle);\n --pst-icon-versionmodified-changed: var(--pst-icon-exclamation-circle);\n --pst-icon-versionmodified-deprecated: var(--pst-icon-exclamation-circle);\n}\n\n/*******************************************************************************\n* master color map. Only the colors that actually differ between light and dark\n* themes are specified separately.\n*\n* To see the full list of colors see https://www.figma.com/file/rUrrHGhUBBIAAjQ82x6pz9/PyData-Design-system---proposal-for-implementation-(2)?node-id=1234%3A765&t=ifcFT1JtnrSshGfi-1\n*/\n/**\n* Function to get items from nested maps\n*/\n/* Assign base colors for the PyData theme */\n:root {\n --pst-teal-50: #f4fbfc;\n --pst-teal-100: #e9f6f8;\n --pst-teal-200: #d0ecf1;\n --pst-teal-300: #abdde6;\n --pst-teal-400: #3fb1c5;\n --pst-teal-500: #0a7d91;\n --pst-teal-600: #085d6c;\n --pst-teal-700: #064752;\n --pst-teal-800: #042c33;\n --pst-teal-900: #021b1f;\n --pst-violet-50: #f4eefb;\n --pst-violet-100: #e0c7ff;\n --pst-violet-200: #d5b4fd;\n --pst-violet-300: #b780ff;\n --pst-violet-400: #9c5ffd;\n --pst-violet-500: #8045e5;\n --pst-violet-600: #6432bd;\n --pst-violet-700: #4b258f;\n --pst-violet-800: #341a61;\n --pst-violet-900: #1e0e39;\n --pst-gray-50: #f9f9fa;\n --pst-gray-100: #f3f4f5;\n --pst-gray-200: #e5e7ea;\n --pst-gray-300: #d1d5da;\n --pst-gray-400: #9ca4af;\n --pst-gray-500: #677384;\n --pst-gray-600: #48566b;\n --pst-gray-700: #29313d;\n --pst-gray-800: #222832;\n --pst-gray-900: #14181e;\n --pst-pink-50: #fcf8fd;\n --pst-pink-100: #fcf0fa;\n --pst-pink-200: #f8dff5;\n --pst-pink-300: #f3c7ee;\n --pst-pink-400: #e47fd7;\n --pst-pink-500: #c132af;\n --pst-pink-600: #912583;\n --pst-pink-700: #6e1c64;\n --pst-pink-800: #46123f;\n --pst-pink-900: #2b0b27;\n --pst-foundation-white: #ffffff;\n --pst-foundation-black: #14181e;\n}\n\n/*******************************************************************************\n* write the color rules for each theme (light/dark)\n*/\n/* NOTE:\n * Mixins enable us to reuse the same definitions for the different modes\n * https://sass-lang.com/documentation/at-rules/mixin\n * something inserts a variable into a CSS selector or property name\n * https://sass-lang.com/documentation/interpolation\n */\n/* Defaults to light mode if data-theme is not set */\nhtml:not([data-theme]) {\n --pst-color-primary: #0a7d91;\n --pst-color-primary-bg: #d0ecf1;\n --pst-color-secondary: #8045e5;\n --pst-color-secondary-bg: #e0c7ff;\n --pst-color-accent: #c132af;\n --pst-color-accent-bg: #f8dff5;\n --pst-color-info: #276be9;\n --pst-color-info-bg: #dce7fc;\n --pst-color-warning: #f66a0a;\n --pst-color-warning-bg: #f8e3d0;\n --pst-color-success: #00843f;\n --pst-color-success-bg: #d6ece1;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #d72d47;\n --pst-color-danger-bg: #f9e1e4;\n --pst-color-text-base: #222832;\n --pst-color-text-muted: #48566b;\n --pst-color-heading-color: #fff;\n --pst-color-shadow: rgba(0, 0, 0, 0.1);\n --pst-color-border: #d1d5da;\n --pst-color-border-muted: rgba(23, 23, 26, 0.2);\n --pst-color-blockquote-notch: #677384;\n --pst-color-inline-code: #912583;\n --pst-color-inline-code-links: #085d6c;\n --pst-color-target: #f3cf95;\n --pst-color-table: #14181e;\n --pst-color-table-row-hover-bg: #b780ff;\n --pst-color-table-inner-border: #e5e7ea;\n --pst-color-background: #ffffff;\n --pst-color-on-background: #ffffff;\n --pst-color-surface: #f3f4f5;\n --pst-color-on-surface: #222832;\n}\nhtml:not([data-theme]) {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\nhtml:not([data-theme]) .only-dark,\nhtml:not([data-theme]) .only-dark ~ figcaption {\n display: none !important;\n}\n\n/* NOTE: @each {...} is like a for-loop\n * https://sass-lang.com/documentation/at-rules/control/each\n */\nhtml[data-theme=light] {\n --pst-color-primary: #0a7d91;\n --pst-color-primary-bg: #d0ecf1;\n --pst-color-secondary: #8045e5;\n --pst-color-secondary-bg: #e0c7ff;\n --pst-color-accent: #c132af;\n --pst-color-accent-bg: #f8dff5;\n --pst-color-info: #276be9;\n --pst-color-info-bg: #dce7fc;\n --pst-color-warning: #f66a0a;\n --pst-color-warning-bg: #f8e3d0;\n --pst-color-success: #00843f;\n --pst-color-success-bg: #d6ece1;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #d72d47;\n --pst-color-danger-bg: #f9e1e4;\n --pst-color-text-base: #222832;\n --pst-color-text-muted: #48566b;\n --pst-color-heading-color: #fff;\n --pst-color-shadow: rgba(0, 0, 0, 0.1);\n --pst-color-border: #d1d5da;\n --pst-color-border-muted: rgba(23, 23, 26, 0.2);\n --pst-color-blockquote-notch: #677384;\n --pst-color-inline-code: #912583;\n --pst-color-inline-code-links: #085d6c;\n --pst-color-target: #f3cf95;\n --pst-color-table: #14181e;\n --pst-color-table-row-hover-bg: #b780ff;\n --pst-color-table-inner-border: #e5e7ea;\n --pst-color-background: #ffffff;\n --pst-color-on-background: #ffffff;\n --pst-color-surface: #f3f4f5;\n --pst-color-on-surface: #222832;\n color-scheme: light;\n}\nhtml[data-theme=light] {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\nhtml[data-theme=light] .only-dark,\nhtml[data-theme=light] .only-dark ~ figcaption {\n display: none !important;\n}\n\nhtml[data-theme=dark] {\n --pst-color-primary: #3fb1c5;\n --pst-color-primary-bg: #042c33;\n --pst-color-secondary: #9c5ffd;\n --pst-color-secondary-bg: #341a61;\n --pst-color-accent: #e47fd7;\n --pst-color-accent-bg: #46123f;\n --pst-color-info: #79a3f2;\n --pst-color-info-bg: #06245d;\n --pst-color-warning: #ff9245;\n --pst-color-warning-bg: #652a02;\n --pst-color-success: #5fb488;\n --pst-color-success-bg: #002f17;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #e78894;\n --pst-color-danger-bg: #4e111b;\n --pst-color-text-base: #ced6dd;\n --pst-color-text-muted: #9ca4af;\n --pst-color-heading-color: #14181e;\n --pst-color-shadow: rgba(0, 0, 0, 0.2);\n --pst-color-border: #48566b;\n --pst-color-border-muted: #29313d;\n --pst-color-blockquote-notch: #9ca4af;\n --pst-color-inline-code: #f3c7ee;\n --pst-color-inline-code-links: #3fb1c5;\n --pst-color-target: #675c04;\n --pst-color-table: #ffffff;\n --pst-color-table-row-hover-bg: #6432bd;\n --pst-color-table-inner-border: #364150;\n --pst-color-background: #14181e;\n --pst-color-on-background: #222832;\n --pst-color-surface: #29313d;\n --pst-color-on-surface: #f3f4f5;\n /* Adjust images in dark mode (unless they have class .only-dark or\n * .dark-light, in which case assume they're already optimized for dark\n * mode).\n */\n /* Give images a light background in dark mode in case they have\n * transparency and black text (unless they have class .only-dark or .dark-light, in\n * which case assume they're already optimized for dark mode).\n */\n color-scheme: dark;\n}\nhtml[data-theme=dark] {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\nhtml[data-theme=dark] .only-light,\nhtml[data-theme=dark] .only-light ~ figcaption {\n display: none !important;\n}\nhtml[data-theme=dark] img:not(.only-dark, .dark-light) {\n filter: brightness(0.8) contrast(1.2);\n}\nhtml[data-theme=dark] .bd-content img:not(.only-dark, .dark-light) {\n background-color: rgb(255, 255, 255);\n border-radius: 0.25rem;\n}\nhtml[data-theme=dark] .MathJax_SVG * {\n fill: var(--pst-color-text-base);\n}\n\n.pst-color-primary {\n color: var(--pst-color-primary);\n}\n\n.pst-color-secondary {\n color: var(--pst-color-secondary);\n}\n\n.pst-color-accent {\n color: var(--pst-color-accent);\n}\n\n.pst-color-info {\n color: var(--pst-color-info);\n}\n\n.pst-color-warning {\n color: var(--pst-color-warning);\n}\n\n.pst-color-success {\n color: var(--pst-color-success);\n}\n\n.pst-color-attention {\n color: var(--pst-color-attention);\n}\n\n.pst-color-danger {\n color: var(--pst-color-danger);\n}\n\n.pst-color-text-base {\n color: var(--pst-color-text-base);\n}\n\n.pst-color-text-muted {\n color: var(--pst-color-text-muted);\n}\n\n.pst-color-heading-color {\n color: var(--pst-color-heading-color);\n}\n\n.pst-color-shadow {\n color: var(--pst-color-shadow);\n}\n\n.pst-color-border {\n color: var(--pst-color-border);\n}\n\n.pst-color-border-muted {\n color: var(--pst-color-border-muted);\n}\n\n.pst-color-blockquote-notch {\n color: var(--pst-color-blockquote-notch);\n}\n\n.pst-color-inline-code {\n color: var(--pst-color-inline-code);\n}\n\n.pst-color-inline-code-links {\n color: var(--pst-color-inline-code-links);\n}\n\n.pst-color-target {\n color: var(--pst-color-target);\n}\n\n.pst-color-table {\n color: var(--pst-color-table);\n}\n\n.pst-color-table-row-hover {\n color: var(--pst-color-table-row-hover);\n}\n\n.pst-color-table-inner-border {\n color: var(--pst-color-table-inner-border);\n}\n\n.pst-color-background {\n color: var(--pst-color-background);\n}\n\n.pst-color-on-background {\n color: var(--pst-color-on-background);\n}\n\n.pst-color-surface {\n color: var(--pst-color-surface);\n}\n\n.pst-color-on-surface {\n color: var(--pst-color-on-surface);\n}\n\n/**\n * Miscellaneous color functions and mixins\n**/\n/**\n* Function to get items from nested maps\n*/\n/**\n * Function to check if the color needs converting to a \"color\" type\n * if it is a string we cannot use other color manipulation functions\n * It is used to create the sphinx-design colours as these are often interpolated\n */\n/**\n * Function to convert the string representation of a color to a color type (hex)\n */\n/*********************************************\n* SASS Mixins\n*********************************************/\n/**\n * A consistent box shadow style we apply across elements.\n */\n/**\n * Set background of some cell outputs to white-ish to make sure colors work\n * This is because many libraries make output that only looks good on white\n */\nhtml {\n font-size: var(--pst-font-size-base);\n scroll-padding-top: calc(var(--pst-header-height) + 1rem);\n}\n\nbody {\n background-color: var(--pst-color-background);\n font-family: var(--pst-font-family-base);\n font-weight: 400;\n line-height: 1.65;\n color: var(--pst-color-text-base);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n}\nbody::-webkit-scrollbar-track {\n background-color: var(--pst-color-background);\n}\n\np {\n margin-bottom: 1.15rem;\n font-size: 1em;\n /* section header in docstring pages */\n}\np.rubric {\n border-bottom: 1px solid var(--pst-color-border);\n}\np.centered {\n text-align: center;\n}\n\na {\n word-wrap: break-word;\n color: var(--pst-color-link);\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n}\na:hover {\n color: var(--pst-color-link-hover);\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\na:active {\n color: var(--pst-color-link);\n}\na:visited {\n color: var(--pst-color-link);\n}\na:visited:hover {\n color: var(--pst-color-link-hover);\n}\na.headerlink {\n color: var(--pst-color-secondary);\n font-size: 0.8em;\n padding: 0 4px;\n margin-left: 0.2em;\n text-decoration: none;\n user-select: none;\n}\na.github::before, a.gitlab::before {\n color: var(--pst-color-text-muted);\n font: var(--fa-font-brands);\n margin-right: 0.25rem;\n}\na.github::before {\n content: var(--pst-icon-github);\n}\na.gitlab::before {\n content: var(--pst-icon-gitlab);\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin: 2.75rem 0 1.05rem;\n font-family: var(--pst-font-family-heading);\n font-weight: var(--pst-font-weight-heading);\n line-height: 1.15;\n}\n\nh1, .h1 {\n margin-top: 0;\n font-size: var(--pst-font-size-h1);\n color: var(--pst-heading-color);\n}\n\nh2, .h2 {\n font-size: var(--pst-font-size-h2);\n color: var(--pst-heading-color);\n}\n\nh3, .h3 {\n font-size: var(--pst-font-size-h3);\n color: var(--pst-heading-color);\n}\n\nh4, .h4 {\n font-size: var(--pst-font-size-h4);\n color: var(--pst-heading-color);\n}\n\nh5, .h5 {\n font-size: var(--pst-font-size-h5);\n color: var(--pst-color-text-base);\n}\n\nh6, .h6 {\n font-size: var(--pst-font-size-h6);\n color: var(--pst-color-text-base);\n}\n\nsmall, .small,\n.text_small {\n font-size: var(--pst-font-size-milli);\n}\n\nhr {\n border: 0;\n border-top: 1px solid var(--pst-color-border);\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--pst-font-family-monospace);\n}\n\nkbd {\n background-color: var(--pst-color-on-background);\n color: var(--pst-color-text-muted);\n}\nkbd:not(.compound) {\n border: 1px solid var(--pst-color-border);\n margin: 0 0.1rem;\n padding: 0.1rem 0.4rem;\n box-shadow: 1px 1px 1px var(--pst-color-shadow);\n}\n\ncode {\n color: var(--pst-color-inline-code);\n}\n\npre {\n margin: 1.5em 0;\n padding: 1rem;\n background-color: var(--pst-color-surface);\n color: var(--pst-color-text-base);\n line-height: 1.2em;\n border: 1px solid var(--pst-color-border);\n border-radius: 0.25rem;\n}\npre .linenos {\n opacity: 0.8;\n padding-right: 10px;\n}\n\n#pst-back-to-top {\n z-index: 1080;\n position: fixed;\n display: none;\n top: 90vh;\n left: 50vw;\n transform: translate(-50%);\n color: var(--pst-color-secondary-text);\n background-color: var(--pst-color-secondary);\n border: none;\n}\n#pst-back-to-top .fa-arrow-up {\n margin-inline-end: 0.5em;\n}\n#pst-back-to-top:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n text-decoration-thickness: 1px;\n background-color: var(--pst-color-secondary-highlight);\n color: var(--pst-color-secondary-highlight-text);\n}\n#pst-back-to-top:focus-visible {\n box-shadow: none;\n outline: var(--pst-color-accent) solid 0.1875rem;\n outline-color: var(--pst-color-secondary);\n outline-offset: 0.1875rem;\n}\n\n:focus-visible {\n outline: var(--pst-color-accent) solid 0.1875rem;\n box-shadow: none;\n}\n\n/***\n * Rules for the UX/UI of skip navigation link btn.\n * It's only visible to people\n * navigating with keyboard for accessibility purposes\n * ref: https://www.youtube.com/watch?v=VUR0I5mqq7I\n ***/\n.skip-link {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n text-align: center;\n background-color: var(--pst-color-warning);\n padding: 0.5rem;\n z-index: 1055;\n border-bottom: 1px solid var(--pst-color-border);\n transform: translateY(-100%);\n transition: transform 150ms ease-in-out;\n}\n.skip-link:focus-within {\n transform: translateY(0%);\n}\n.skip-link a {\n color: var(--pst-color-warning-text) !important;\n}\n.skip-link a:focus-visible {\n outline-color: #14181e;\n}\n\n.bd-container {\n flex-grow: 1;\n display: flex;\n justify-content: center;\n}\n.bd-container .bd-container__inner {\n display: flex;\n}\n\n.bd-page-width {\n width: 100%;\n}\n@media (min-width: 960px) {\n .bd-page-width {\n max-width: 88rem;\n }\n}\n\n.pst-async-banner-revealer {\n height: 0;\n overflow: hidden;\n transition: height 300ms ease-in-out;\n}\n@media (prefers-reduced-motion) {\n .pst-async-banner-revealer {\n transition: none;\n }\n}\n\n#bd-header-version-warning,\n.bd-header-announcement {\n min-height: 3rem;\n width: 100%;\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 0.5rem 12.5%;\n}\n@media (max-width: 959.98px) {\n #bd-header-version-warning,\n .bd-header-announcement {\n padding: 0.5rem 2%;\n }\n}\n#bd-header-version-warning p,\n.bd-header-announcement p {\n font-weight: bold;\n margin: 0;\n}\n#bd-header-version-warning a,\n.bd-header-announcement a {\n color: var(--pst-color-inline-code-links);\n}\n#bd-header-version-warning .pst-button-link-to-stable-version,\n.bd-header-announcement .pst-button-link-to-stable-version {\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n background-color: var(--pst-color-danger);\n border-color: var(--pst-color-danger);\n color: var(--pst-color-danger-text);\n border-radius: 0.25rem;\n}\n#bd-header-version-warning .pst-button-link-to-stable-version:hover,\n.bd-header-announcement .pst-button-link-to-stable-version:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n text-decoration-thickness: 1px;\n background-color: var(--pst-color-danger-highlight);\n border-color: var(--pst-color-danger-highlight);\n color: var(--pst-color-danger-highlight-text);\n}\n#bd-header-version-warning .pst-button-link-to-stable-version:focus-visible,\n.bd-header-announcement .pst-button-link-to-stable-version:focus-visible {\n outline: 0.1875rem solid var(--pst-color-danger);\n outline-offset: 0.1875rem;\n}\n\n.bd-header-announcement {\n background-color: var(--pst-color-secondary-bg);\n}\n\n#bd-header-version-warning {\n background-color: var(--pst-color-danger-bg);\n}\n\n/**\n * Main content area\n */\n.bd-main {\n flex-grow: 1;\n flex-direction: column;\n display: flex;\n min-width: 0;\n}\n.bd-main .bd-content {\n display: flex;\n justify-content: center;\n height: 100%;\n}\n.bd-main .bd-content .bd-article-container {\n justify-content: start;\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 60em;\n overflow-x: auto;\n padding: 1rem;\n}\n@media (min-width: 1200px) {\n .bd-main .bd-content .bd-article-container .bd-article {\n padding-top: 1.5rem;\n padding-left: 2rem;\n }\n}\n\n.bd-footer {\n width: 100%;\n border-top: 1px solid var(--pst-color-border);\n}\n.bd-footer .bd-footer__inner {\n display: flex;\n flex-grow: 1;\n padding: 1rem;\n margin: auto;\n}\n.bd-footer .footer-items__start,\n.bd-footer .footer-items__center,\n.bd-footer .footer-items__end {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n justify-content: center;\n flex-grow: 1;\n}\n.bd-footer .footer-items__center {\n text-align: center;\n}\n.bd-footer .footer-items__end {\n text-align: end;\n}\n.bd-footer .footer-item p {\n margin-bottom: 0;\n}\n\n.bd-footer-article {\n margin-top: auto;\n}\n.bd-footer-article .footer-article-items {\n display: flex;\n flex-direction: column;\n}\n\n.bd-footer-content .footer-content-items {\n display: flex;\n flex-direction: column;\n margin-top: auto;\n}\n\n/**\n * Header at the top of the page\n * It includes the announcement bar and the navigation bar.\n */\n.bd-header {\n position: sticky;\n top: 0;\n z-index: 1030;\n background-color: var(--pst-color-on-background) !important;\n box-shadow: 0 0.125rem 0.25rem 0 var(--pst-color-shadow);\n width: 100%;\n padding: 0;\n max-width: 100vw;\n justify-content: center;\n}\n.bd-header .bd-header__inner {\n display: flex;\n align-items: center;\n height: fit-content;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.bd-header :focus-visible {\n border-radius: 0.125rem;\n}\n.bd-header .navbar-item {\n height: var(--pst-header-height);\n max-height: var(--pst-header-height);\n display: flex;\n align-items: center;\n}\n.bd-header .navbar-header-items {\n display: none;\n flex-shrink: 1;\n}\n@media (min-width: 960px) {\n .bd-header .navbar-header-items {\n display: inherit;\n flex-grow: 1;\n padding: 0 0 0 0.5rem;\n }\n}\n.bd-header .navbar-header-items__end,\n.bd-header .navbar-header-items__center,\n.bd-header .navbar-header-items__start {\n display: flex;\n align-items: center;\n flex-flow: wrap;\n row-gap: 0;\n}\n.bd-header .navbar-header-items__end,\n.bd-header .navbar-header-items__center {\n column-gap: 1.12rem;\n}\n.bd-header .navbar-header-items__start {\n flex-shrink: 0;\n margin-right: auto;\n gap: 0.5rem;\n}\n.bd-header .navbar-header-items__end {\n justify-content: end;\n}\n.bd-header ul.navbar-nav {\n display: flex;\n}\n@media (min-width: 960px) {\n .bd-header ul.navbar-nav {\n align-items: baseline;\n }\n}\n.bd-header ul.navbar-nav > li.nav-item {\n margin-inline: 2px;\n}\n.bd-header ul.navbar-nav > li.nav-item > .nav-link {\n color: var(--pst-color-text-muted);\n position: relative;\n padding-inline: 6px;\n}\n.bd-header ul.navbar-nav > li.nav-item > .nav-link::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n background-color: transparent;\n bottom: calc(-1 * max(3px, .1875rem, .12em));\n margin: max(3px, .1875rem, .12em) 0;\n}\n.bd-header ul.navbar-nav > li.nav-item > .nav-link:hover {\n color: var(--pst-color-secondary);\n text-decoration: none;\n}\n.bd-header ul.navbar-nav > li.nav-item > .nav-link:hover::before {\n border-bottom: max(3px, .1875rem, .12em) solid var(--pst-color-secondary);\n}\n.bd-header ul.navbar-nav > li.nav-item > .nav-link:focus-visible {\n box-shadow: none;\n outline: 3px solid var(--pst-color-accent);\n outline-offset: 3px;\n}\n.bd-header ul.navbar-nav > li.nav-item.current > .nav-link {\n color: var(--pst-color-primary);\n}\n.bd-header ul.navbar-nav > li.nav-item.current > .nav-link::before {\n border-bottom: 3px solid var(--pst-color-primary);\n}\n.bd-header ul.navbar-nav > li.nav-item.dropdown {\n margin-inline: 4px;\n}\n.bd-header ul.navbar-nav > li.nav-item.dropdown button {\n padding-inline: 8px;\n}\n.bd-header ul.navbar-nav > li.nav-item.dropdown > .dropdown-toggle {\n border-radius: 0.125rem;\n color: var(--pst-color-text-muted);\n}\n.bd-header ul.navbar-nav > li.nav-item.dropdown > .dropdown-toggle:focus-visible {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);\n}\n.bd-header ul.navbar-nav > li.nav-item.dropdown > .dropdown-toggle:hover {\n text-decoration: none;\n box-shadow: 0 0 0 0.1875rem var(--pst-color-link-hover);\n color: var(--pst-color-text-base);\n}\n.bd-header ul.navbar-nav li a.nav-link.dropdown-item {\n color: var(--pst-color-text-muted);\n text-decoration: none;\n}\n.bd-header ul.navbar-nav li a.nav-link.dropdown-item:hover {\n color: var(--pst-color-link-hover);\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\n.bd-header ul.navbar-nav .dropdown button {\n display: unset;\n border: none;\n}\n.bd-header ul.navbar-nav .dropdown button:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n}\n.bd-header ul.navbar-nav .dropdown .dropdown-menu {\n z-index: 1070;\n border: 1px solid var(--pst-color-border);\n box-shadow: 0 0 0.3rem 0.1rem var(--pst-color-shadow);\n background-color: var(--pst-color-on-background);\n padding: 0.5rem 0;\n margin: 0.5rem 0;\n min-width: 20rem;\n}\n.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item {\n padding: 0.25rem 1.5rem;\n}\n.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus:not(:hover, :active) {\n background-color: inherit;\n}\n.bd-header ul.navbar-nav .dropdown .dropdown-menu .dropdown-item:focus-visible {\n z-index: 10;\n}\n.bd-header ul.navbar-nav .dropdown .dropdown-menu:not(.show) {\n display: none;\n}\n.bd-header button.sidebar-toggle {\n font-size: var(--pst-font-size-icon);\n color: var(--pst-color-muted);\n margin-bottom: 0;\n background-color: inherit;\n padding: 0.5rem;\n}\n.bd-header button.primary-toggle {\n margin-right: 1rem;\n}\n@media (min-width: 960px) {\n .bd-header button.primary-toggle {\n display: none;\n }\n}\n.bd-header button.secondary-toggle {\n margin-left: 1rem;\n}\n@media (min-width: 1200px) {\n .bd-header button.secondary-toggle {\n display: none;\n }\n}\n\n@media (min-width: 960px) {\n .navbar-center-items .navbar-item {\n display: inline-block;\n }\n}\n.nav-link {\n transition: none;\n}\n.nav-link:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n}\n.nav-link.nav-external::after {\n font: var(--fa-font-solid);\n content: var(--pst-icon-external-link);\n font-size: 0.75em;\n margin-left: 0.3em;\n}\n\n.bd-navbar-elements li.nav-item i {\n font-size: 0.7rem;\n padding-left: 2px;\n vertical-align: middle;\n}\n\n.navbar-persistent--mobile {\n margin-left: auto;\n}\n@media (min-width: 960px) {\n .navbar-persistent--mobile {\n display: none;\n }\n}\n\n.navbar-persistent--container {\n display: none;\n}\n@media (min-width: 960px) {\n .navbar-persistent--container {\n display: flex;\n }\n}\n\n.header-article__inner {\n padding: 0 0.5rem;\n}\n.header-article__inner .header-article-item {\n min-height: var(--pst-header-article-height);\n}\n.header-article__inner .header-article-items__end {\n margin-left: auto;\n}\n\n/**\n * The primary sidebar on the left.\n * e.g., between-pages navigation.\n */\n.bd-sidebar-primary {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n max-height: calc(100vh - var(--pst-header-height));\n position: sticky;\n top: var(--pst-header-height);\n flex: 0 0 auto;\n width: 25%;\n padding: 2rem 1rem 1rem 1rem;\n border-right: 1px solid var(--pst-color-border);\n background-color: var(--pst-color-background);\n overflow-y: auto;\n font-size: var(--pst-sidebar-font-size-mobile);\n}\n@media (min-width: 960px) {\n .bd-sidebar-primary {\n font-size: var(--pst-sidebar-font-size);\n }\n}\n.bd-sidebar-primary :focus-visible {\n border-radius: 0.125rem;\n}\n.bd-sidebar-primary .nav-link {\n font-size: var(--pst-sidebar-font-size-mobile);\n}\n.bd-sidebar-primary.no-sidebar {\n border-right: 0;\n}\n@media (min-width: 960px) {\n .bd-sidebar-primary.hide-on-wide {\n display: none;\n }\n}\n.bd-sidebar-primary h1, .bd-sidebar-primary .h1,\n.bd-sidebar-primary h2,\n.bd-sidebar-primary .h2,\n.bd-sidebar-primary h3,\n.bd-sidebar-primary .h3,\n.bd-sidebar-primary h4,\n.bd-sidebar-primary .h4 {\n color: var(--pst-color-text-base);\n}\n.bd-sidebar-primary .sidebar-primary-items__start .sidebar-primary-item,\n.bd-sidebar-primary .sidebar-primary-items__end .sidebar-primary-item {\n padding: 0.5rem 0;\n}\n.bd-sidebar-primary .sidebar-header-items {\n display: flex;\n flex-direction: column;\n}\n.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__title {\n font-weight: var(--pst-sidebar-header-font-weight);\n font-size: var(--pst-sidebar-header-font-size);\n color: var(--pst-color-text-base);\n margin-bottom: 0.5rem;\n}\n.bd-sidebar-primary .sidebar-header-items .bd-navbar-elements .nav-link:focus-visible {\n box-shadow: none;\n outline: var(--pst-color-accent) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\n.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__center {\n display: flex;\n flex-direction: column;\n}\n.bd-sidebar-primary .sidebar-header-items .sidebar-header-items__end {\n display: flex;\n align-items: center;\n gap: 1rem;\n}\n@media (min-width: 960px) {\n .bd-sidebar-primary .sidebar-header-items {\n display: none;\n }\n}\n.bd-sidebar-primary .sidebar-primary-items__start {\n border-top: 1px solid var(--pst-color-border);\n}\n@media (min-width: 960px) {\n .bd-sidebar-primary .sidebar-primary-items__start {\n border-top: none;\n }\n}\n.bd-sidebar-primary .sidebar-primary-items__end {\n margin-top: auto;\n margin-bottom: 1em;\n}\n.bd-sidebar-primary .list-caption {\n list-style: none;\n padding-left: 0;\n}\n.bd-sidebar-primary .list-caption li.toctree-l0.has-children > details > summary {\n position: relative;\n height: auto;\n width: auto;\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n}\n.bd-sidebar-primary .list-caption li.toctree-l0.has-children > details > summary .toctree-toggle {\n flex: 0 0 auto;\n}\n.bd-sidebar-primary .list-caption li.toctree-l0.has-children > details > summary .toctree-toggle .fa-chevron-down {\n font-size: 1rem;\n}\n.bd-sidebar-primary li.has-children {\n position: relative;\n}\n.bd-sidebar-primary li.has-children > .reference,\n.bd-sidebar-primary li.has-children .caption {\n margin-right: calc(30px + 0.1875rem);\n padding-top: 0.25rem;\n}\n.bd-sidebar-primary li.has-children > details > summary {\n list-style: none;\n}\n.bd-sidebar-primary li.has-children > details > summary::-webkit-details-marker {\n display: none;\n}\n.bd-sidebar-primary li.has-children > details > summary:focus-visible {\n outline: none;\n}\n.bd-sidebar-primary li.has-children > details > summary:focus-visible > .toctree-toggle {\n outline: var(--pst-color-accent) solid 0.1875rem;\n outline-offset: -0.1875rem;\n}\n.bd-sidebar-primary li.has-children > details > summary .toctree-toggle {\n cursor: pointer;\n position: absolute;\n top: 0;\n right: 0;\n width: 30px;\n height: 30px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n}\n.bd-sidebar-primary li.has-children > details > summary .toctree-toggle .fa-chevron-down {\n font-size: 0.75rem;\n}\n.bd-sidebar-primary li.has-children > details[open] > summary .fa-chevron-down {\n transform: rotate(180deg);\n}\n\n/* Between-page links and captions */\nnav.bd-links {\n margin-right: -1rem;\n}\n@media (min-width: 960px) {\n nav.bd-links {\n display: block;\n }\n}\nnav.bd-links ul {\n display: block;\n list-style: none;\n}\nnav.bd-links ul ul {\n padding: 0 0 0 1rem;\n}\nnav.bd-links li > a {\n display: block;\n padding: 0.25rem 0.65rem;\n color: var(--pst-color-text-muted);\n text-decoration: none;\n box-shadow: none;\n margin-right: 0.1875rem;\n}\nnav.bd-links li > a:hover {\n text-decoration: underline;\n background-color: transparent;\n color: var(--pst-color-link-hover);\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\nnav.bd-links li > a:active {\n color: var(--pst-color-link-hover);\n}\nnav.bd-links li > a:focus-visible {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);\n outline: none;\n z-index: 10;\n}\nnav.bd-links li > a.reference.external::after {\n font: var(--fa-font-solid);\n content: var(--pst-icon-external-link);\n font-size: 0.75em;\n margin-left: 0.3em;\n}\nnav.bd-links .current > a {\n font-weight: 600;\n color: var(--pst-color-primary);\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary);\n background-color: transparent;\n}\nnav.bd-links .current > a:focus-visible {\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary), 0 0 0 0.1875rem var(--pst-color-accent);\n outline: none;\n}\nnav.bd-links p.bd-links__title {\n font-size: var(--pst-sidebar-header-font-size);\n font-weight: var(--pst-sidebar-header-font-weight);\n margin-bottom: 0.5rem;\n}\nnav.bd-links p.caption {\n font-weight: var(--pst-sidebar-header-font-weight);\n position: relative;\n margin-top: 1.25rem;\n margin-bottom: 0.5rem;\n color: var(--pst-color-text-base);\n font-size: var(--pst-sidebar-font-size-mobile);\n}\nnav.bd-links p.caption:first-child {\n margin-top: 0;\n}\n@media (min-width: 960px) {\n nav.bd-links p.caption {\n font-size: var(--pst-sidebar-font-size);\n }\n}\n\n/**\n * Secondary sidebar on the right.\n * e.g., in-page table of contents.\n */\n.bd-sidebar-secondary {\n display: flex;\n order: 2;\n flex-shrink: 0;\n flex-direction: column;\n position: sticky;\n top: var(--pst-header-height);\n max-height: calc(100vh - var(--pst-header-height));\n padding: 2rem 1rem 1rem;\n width: var(--pst-sidebar-secondary);\n font-size: var(--pst-sidebar-font-size-mobile);\n background-color: var(--pst-color-background);\n overflow-y: auto;\n}\n@media (min-width: 1200px) {\n .bd-sidebar-secondary {\n font-size: var(--pst-sidebar-font-size);\n }\n}\n\n.sidebar-secondary-item {\n padding: 0.5rem;\n}\n@media (min-width: 1200px) {\n .sidebar-secondary-item {\n border-left: 1px solid var(--pst-color-border);\n padding-left: 1rem;\n }\n}\n.sidebar-secondary-item i {\n padding-right: 0.5rem;\n}\n\n/*******************************************************************************\n* Rules for the UX/UI of sidebar sliding drawers on mobile\n* Note that this sheet controls styles across many parts of the theme\n* It is aggregated into this one sheet instead of being split across\n* components in order to keep it easier to debug in one place.\n* It is broken up into major sections below.\n*/\n/*******************************************************************************\n* Sidebar drawer behavior\n*/\n/**\n * NOTE: We use this mixin to define the toggle behavior on narrow screens,\n * And the wide-screen behavior of the sections is defined in their own section\n * .scss files.\n */\n.bd-sidebar::backdrop {\n background-color: black;\n opacity: 0.5;\n}\n\n@media (max-width: 959.98px) {\n .bd-sidebar-primary {\n position: fixed;\n top: 0;\n z-index: 1055;\n height: 100vh;\n max-height: 100vh;\n width: 75%;\n flex-grow: 0.75;\n max-width: 350px;\n transition: visibility 200ms ease-out, margin 200ms ease-out;\n visibility: hidden;\n border: 0;\n margin-left: -75%;\n left: 0;\n }\n}\n.bd-sidebar-primary[open] {\n margin-left: 0;\n visibility: visible;\n}\n\n@media (max-width: 1199.98px) {\n .bd-sidebar-secondary {\n position: fixed;\n top: 0;\n z-index: 1055;\n height: 100vh;\n max-height: 100vh;\n width: 75%;\n flex-grow: 0.75;\n max-width: 350px;\n transition: visibility 200ms ease-out, margin 200ms ease-out;\n visibility: hidden;\n border: 0;\n margin-right: -75%;\n right: 0;\n }\n}\n.bd-sidebar-secondary[open] {\n margin-right: 0;\n visibility: visible;\n}\n\n/**\n * Breadcrumbs for parent pages meant for the article header\n */\nul.bd-breadcrumbs {\n list-style: none;\n padding-left: 0;\n display: flex;\n flex-wrap: wrap;\n font-size: 0.8rem;\n}\nul.bd-breadcrumbs li.breadcrumb-item {\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow-x: hidden;\n font-weight: bold;\n}\nul.bd-breadcrumbs li.breadcrumb-item a,\nul.bd-breadcrumbs li.breadcrumb-item .ellipsis {\n overflow-x: hidden;\n text-overflow: ellipsis;\n margin: 0.1875rem;\n}\nul.bd-breadcrumbs li.breadcrumb-item a {\n color: var(--pst-color-text-muted);\n text-decoration: none;\n}\nul.bd-breadcrumbs li.breadcrumb-item a:hover {\n color: var(--pst-color-link-hover);\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\nul.bd-breadcrumbs li.breadcrumb-item:not(.breadcrumb-home)::before {\n font: var(--fa-font-solid);\n font-size: 0.8rem;\n content: var(--pst-breadcrumb-divider);\n color: var(--pst-color-text-muted);\n padding: 0 0.5rem;\n}\n\n/**\n * Icon links in the navbar\n */\nhtml .pst-navbar-icon {\n box-sizing: border-box;\n min-width: 24px;\n min-height: 24px;\n color: var(--pst-color-text-muted);\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 0;\n border: none;\n font-size: 1rem;\n line-height: 1.65;\n padding: 0.25rem 0;\n height: 2.15rem;\n}\nhtml .pst-navbar-icon::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n background-color: transparent;\n bottom: calc(-1 * max(3px, .1875rem, .12em));\n margin: max(3px, .1875rem, .12em) 0;\n}\nhtml .pst-navbar-icon:hover {\n color: var(--pst-color-secondary);\n text-decoration: none;\n}\nhtml .pst-navbar-icon:hover::before {\n border-bottom: max(3px, .1875rem, .12em) solid var(--pst-color-secondary);\n}\nhtml .pst-navbar-icon:focus-visible {\n box-shadow: none;\n outline: 3px solid var(--pst-color-accent);\n outline-offset: 3px;\n}\n\nul.navbar-icon-links {\n display: flex;\n flex-flow: row wrap;\n column-gap: 1.12rem;\n justify-content: space-evenly;\n align-items: center;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\nul.navbar-icon-links i {\n /* Social media buttons hard-code the brand color */\n}\nul.navbar-icon-links i.fa-brands, ul.navbar-icon-links i.fa-regular, ul.navbar-icon-links i.fa-solid {\n vertical-align: middle;\n font-style: normal;\n font-size: var(--pst-font-size-icon);\n}\nul.navbar-icon-links i.fa-square-twitter::before {\n color: #55acee;\n}\nul.navbar-icon-links i.fa-square-gitlab::before {\n color: #548;\n}\nul.navbar-icon-links i.fa-bitbucket::before {\n color: #0052cc;\n}\nul.navbar-icon-links img.icon-link-image {\n height: 1.5em;\n border-radius: 0.2rem;\n}\nul.navbar-icon-links .fa-pydata {\n stroke: var(--pst-color-background);\n stroke-linejoin: round;\n stroke-width: 0.35;\n}\n\n/**\n * Logo in the navbar\n */\n.navbar-brand {\n position: relative;\n height: var(--pst-header-height);\n max-height: var(--pst-header-height);\n padding: 0.5rem 0;\n width: auto;\n margin: 0;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: 0.5rem;\n}\n.navbar-brand p {\n color: var(--pst-color-text-base);\n margin-bottom: 0;\n}\n.navbar-brand img {\n max-width: 100%;\n height: 100%;\n width: auto;\n}\n.navbar-brand:hover, .navbar-brand:visited:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n color: var(--pst-color-text-base);\n}\n\n/**\n * Navigation links in the navbar and icon links\n */\nul.navbar-nav ul {\n padding: 0 0 0 1rem;\n}\nul.navbar-nav li {\n display: flex;\n flex-direction: column;\n}\nul.navbar-nav li a {\n display: flex;\n align-items: center;\n height: 100%;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n color: var(--pst-color-text-muted);\n text-decoration: none;\n}\nul.navbar-nav li a:hover {\n color: var(--pst-color-link-hover);\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\n\n/**\n * The list of in-page TOC links\n */\n.page-toc .section-nav {\n padding-left: 0;\n border-bottom: none;\n}\n.page-toc .section-nav ul {\n padding-left: 1rem;\n}\n.page-toc .nav-link {\n font-size: var(--pst-sidebar-font-size-mobile);\n}\n@media (min-width: 1200px) {\n .page-toc .nav-link {\n font-size: var(--pst-sidebar-font-size);\n }\n}\n.page-toc .onthispage {\n color: var(--pst-color-text-base);\n font-weight: var(--pst-sidebar-header-font-weight);\n margin-bottom: 0.5rem;\n}\n\n/**\n* Previous / Next navigation buttons\n**/\n.prev-next-area {\n width: 100%;\n}\n.prev-next-area p {\n color: var(--pst-color-text-muted);\n margin: 0 0.3em;\n line-height: 1.3em;\n}\n.prev-next-area i {\n font-size: 1.2em;\n}\n.prev-next-area a {\n display: flex;\n align-items: center;\n border: none;\n padding: 10px;\n max-width: 45%;\n overflow-x: hidden;\n color: var(--pst-color-text-muted);\n text-decoration: none;\n}\n.prev-next-area a p.prev-next-title {\n word-wrap: break-word;\n color: var(--pst-color-link);\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n font-weight: var(--pst-admonition-font-weight-heading);\n font-size: 1.1em;\n}\n.prev-next-area a p.prev-next-title:hover {\n color: var(--pst-color-link-hover);\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\n.prev-next-area a p.prev-next-title:active {\n color: var(--pst-color-link);\n}\n.prev-next-area a p.prev-next-title:visited {\n color: var(--pst-color-link);\n}\n.prev-next-area a p.prev-next-title:visited:hover {\n color: var(--pst-color-link-hover);\n}\n.prev-next-area a:hover p.prev-next-title, .prev-next-area a:visited:hover p.prev-next-title {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n}\n.prev-next-area a .prev-next-info {\n flex-direction: column;\n margin: 0 0.5em;\n}\n.prev-next-area a .prev-next-info .prev-next-subtitle {\n text-transform: capitalize;\n}\n.prev-next-area a.left-prev {\n float: left;\n}\n.prev-next-area a.right-next {\n float: right;\n}\n.prev-next-area a.right-next div.prev-next-info {\n text-align: right;\n}\n\n/**\n * Search field\n **/\n.bd-search {\n position: relative;\n padding-left: 0.5rem;\n gap: 0.5rem;\n background-color: var(--pst-color-background);\n border-radius: 0.25rem;\n border: 1px solid var(--pst-color-border);\n color: var(--pst-color-text-base);\n}\n.bd-search:active {\n background-color: var(--pst-color-background);\n color: var(--pst-color-text-muted);\n}\n.bd-search:focus-within {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);\n}\n.bd-search:focus-within input:focus {\n box-shadow: none;\n}\n.bd-search .icon {\n position: absolute;\n color: var(--pst-color-border);\n left: 25px;\n}\n.bd-search .fa-solid.fa-magnifying-glass {\n position: absolute;\n left: calc((2.5rem - 0.7em) / 2);\n color: var(--pst-color-text-muted);\n}\n.bd-search input.form-control {\n background-color: var(--pst-color-background);\n color: var(--pst-color-text-base);\n border: none;\n}\n.bd-search input.form-control::placeholder {\n color: var(--pst-color-text-muted);\n}\n.bd-search input.form-control::-webkit-search-cancel-button, .bd-search input.form-control::-webkit-search-decoration {\n appearance: none;\n}\n.bd-search input.form-control:focus, .bd-search input.form-control:focus-visible {\n color: var(--pst-color-text-muted);\n}\n.bd-search .search-button__kbd-shortcut {\n display: none;\n margin-inline-end: 0.5rem;\n color: var(--pst-color-border);\n}\n@media (min-width: 720px) {\n .bd-search .search-button__kbd-shortcut {\n display: flex;\n }\n}\n\n/**\n * Search button - located in the navbar\n */\n.search-button i {\n font-size: 1.3rem;\n}\n\n/**\n * The search modal \n */\n#pst-search-dialog {\n display: none;\n}\n#pst-search-dialog[open] {\n display: flex;\n position: fixed;\n z-index: 1055;\n top: 30%;\n left: 50%;\n transform: translate(-50%, -50%);\n right: 1rem;\n margin-top: 0.5rem;\n width: 90%;\n max-width: 800px;\n background-color: transparent;\n padding: 0.1875rem;\n border: none;\n}\n#pst-search-dialog[open]::backdrop {\n background-color: black;\n opacity: 0.5;\n}\n#pst-search-dialog[open] form.bd-search {\n flex-grow: 1;\n}\n#pst-search-dialog[open] form.bd-search svg,\n#pst-search-dialog[open] form.bd-search input {\n font-size: var(--pst-font-size-icon);\n}\n\n/**\n * The search button component that looks like a field.\n * Lives at components/search-button-field.html\n */\n.search-button-field {\n display: inline-flex;\n align-items: center;\n border: var(--pst-color-border) solid 1px;\n border-radius: 1.5em;\n color: var(--pst-color-text-muted);\n padding: 0.5em;\n background-color: var(--pst-color-surface);\n}\n.search-button-field:hover {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-link-hover);\n}\n.search-button-field:focus-visible {\n border-radius: 1.5em;\n}\n.search-button-field .search-button__default-text {\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n margin-right: 0.5em;\n margin-left: 0.5em;\n}\n.search-button-field .kbd-shortcut__modifier {\n font-size: 0.75em;\n}\n.search-button-field > * {\n align-items: center;\n}\n.search-button-field > :not(svg) {\n display: none;\n}\n@media (min-width: 960px) {\n .search-button-field > :not(svg) {\n display: flex;\n }\n}\n\n/**\n * The 'Hide Search Matches' button.\n * This only shows up when a person lands on a page after clicking a search result.\n * Clicking it removes the highlighting of the search term from the page.\n * We want it to behave like a button.\n */\ndiv#searchbox p.highlight-link {\n margin: 1rem 0;\n width: fit-content;\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n}\n@media (min-width: 1200px) {\n div#searchbox p.highlight-link {\n margin-left: 2rem;\n }\n}\ndiv#searchbox p.highlight-link a {\n border-radius: 0.25rem;\n font-size: 1.25rem;\n padding: 0.75rem;\n background-color: var(--pst-color-primary);\n color: var(--pst-color-primary-text);\n text-decoration: none;\n transition: box-shadow 0.25s ease-out;\n}\ndiv#searchbox p.highlight-link a:hover {\n box-shadow: inset 0 0 50px 50px rgba(0, 0, 0, 0.25);\n}\ndiv#searchbox p.highlight-link a::before {\n content: var(--pst-icon-search-minus);\n color: unset;\n font: var(--fa-font-solid);\n margin-right: 0.5rem;\n}\n\n/**\n * Light/dark theme switcher\n */\n.theme-switch-button .theme-switch {\n display: none;\n}\n.theme-switch-button .theme-switch:active {\n text-decoration: none;\n color: var(--pst-color-link-hover);\n}\n.theme-switch-button .theme-switch .fa-lg {\n aspect-ratio: 1/1;\n}\n\nhtml[data-mode=auto] .theme-switch-button .theme-switch[data-mode=auto] {\n display: inline;\n}\n\nhtml[data-mode=light] .theme-switch-button .theme-switch[data-mode=light] {\n display: inline;\n}\n\nhtml[data-mode=dark] .theme-switch-button .theme-switch[data-mode=dark] {\n display: inline;\n}\n\nbutton.btn.version-switcher__button {\n border-color: var(--pst-color-border);\n color: var(--pst-color-text-base);\n margin-bottom: 1em;\n}\n@media (min-width: 960px) {\n button.btn.version-switcher__button {\n margin-bottom: unset;\n }\n}\nbutton.btn.version-switcher__button:hover {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-secondary);\n border-color: transparent;\n}\nbutton.btn.version-switcher__button:active {\n color: var(--pst-color-text-base);\n border-color: var(--pst-color-border);\n}\nbutton.btn.version-switcher__button:focus-visible {\n border-color: transparent;\n}\n\n.version-switcher__menu {\n border-color: var(--pst-color-border);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.version-switcher__menu a.list-group-item {\n background-color: var(--pst-color-on-background);\n color: var(--pst-color-text-base);\n padding: 0.75rem 1.25rem;\n}\n.version-switcher__menu a.list-group-item:not(:last-child) {\n border-bottom: 1px solid var(--pst-color-border);\n}\n.version-switcher__menu a.list-group-item:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n background-color: var(--pst-color-surface);\n}\n.version-switcher__menu a.list-group-item.active {\n font-weight: 600;\n color: var(--pst-color-primary);\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary);\n position: relative;\n z-index: 1;\n}\n.version-switcher__menu a.list-group-item.active:focus-visible {\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary), 0 0 0 0.1875rem var(--pst-color-accent);\n outline: none;\n}\n.version-switcher__menu a.list-group-item.active span::before {\n content: \"\";\n width: 100%;\n height: 100%;\n position: absolute;\n z-index: -1;\n left: 0;\n top: 0;\n}\n.version-switcher__menu a.list-group-item:focus-visible {\n z-index: 10;\n}\n\nbutton.version-switcher__button,\n.version-switcher__menu {\n font-size: 1.1em;\n z-index: 1055;\n box-sizing: border-box;\n min-width: 24px;\n min-height: 24px;\n}\n@media (min-width: 960px) {\n button.version-switcher__button,\n .version-switcher__menu {\n font-size: unset;\n }\n}\n\n/* Collapsing of the TOC sidebar while scrolling */\n/* Nav: hide second level (shown on .active) */\nnav.page-toc {\n margin-bottom: 1rem;\n}\n\n.bd-toc .nav .nav {\n display: none;\n}\n.bd-toc .nav .nav.visible {\n display: block;\n}\n.bd-toc .nav > .active > ul {\n display: block;\n}\n\n.toc-entry {\n display: block;\n}\n.toc-entry a > code {\n color: var(--pst-color-text-muted);\n}\n.toc-entry a.nav-link {\n display: block;\n padding: 0.25rem 0;\n padding-left: 1rem;\n margin-left: -1rem;\n color: var(--pst-color-text-muted);\n text-decoration: none;\n}\n.toc-entry a.nav-link:hover {\n text-decoration: underline;\n background-color: transparent;\n color: var(--pst-color-link-hover);\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n}\n.toc-entry a.nav-link:active {\n color: var(--pst-color-link-hover);\n}\n.toc-entry a.nav-link:focus-visible {\n box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);\n outline: none;\n z-index: 10;\n}\n.toc-entry a.nav-link.active {\n font-weight: 600;\n color: var(--pst-color-primary);\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary);\n background-color: transparent;\n}\n.toc-entry a.nav-link.active:focus-visible {\n box-shadow: inset max(3px, .1875rem, .12em) 0 0 var(--pst-color-primary), 0 0 0 0.1875rem var(--pst-color-accent);\n outline: none;\n}\n.toc-entry a.nav-link.active:hover {\n color: var(--pst-color-link-hover);\n}\n.toc-entry a.nav-link:focus-visible {\n border-radius: 0.125rem;\n}\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated {\n vertical-align: middle;\n margin: 1.5625em auto;\n padding: 0 0.6rem;\n overflow: hidden;\n /* break-inside has replaced page-break-inside and is widely usable since 2019 */\n page-break-inside: avoid;\n break-inside: avoid;\n border-left: 0.2rem solid;\n border-color: var(--pst-color-info);\n border-radius: 0.25rem;\n background-color: var(--pst-color-on-background);\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n position: relative;\n}\ndiv.versionadded > p,\ndiv.versionchanged > p,\ndiv.deprecated > p {\n margin-bottom: 0.6rem;\n margin-top: 0.6rem;\n}\n\ndiv.versionadded {\n border-color: var(--pst-color-success);\n background-color: var(--pst-color-success-bg);\n}\n\ndiv.versionchanged {\n border-color: var(--pst-color-warning);\n background-color: var(--pst-color-warning-bg);\n}\n\ndiv.deprecated {\n border-color: var(--pst-color-danger);\n background-color: var(--pst-color-danger-bg);\n}\n\nspan.versionmodified {\n font-weight: 600;\n}\nspan.versionmodified::before {\n margin-right: 0.6rem;\n color: var(--pst-color-info);\n font: var(--fa-font-solid);\n content: var(--pst-icon-versionmodified-default);\n}\n\nspan.versionmodified.added::before {\n color: var(--pst-color-success);\n content: var(--pst-icon-versionmodified-added);\n}\n\nspan.versionmodified.changed::before {\n color: var(--pst-color-warning);\n content: var(--pst-icon-versionmodified-changed);\n}\n\nspan.versionmodified.deprecated::before {\n color: var(--pst-color-danger);\n content: var(--pst-icon-versionmodified-deprecated);\n}\n\n.sidebar-indices-items {\n display: flex;\n flex-direction: column;\n border-top: 1px solid var(--pst-color-border);\n}\n@media (min-width: 960px) {\n .sidebar-indices-items {\n border-top: none;\n }\n}\n.sidebar-indices-items .sidebar-indices-items__title {\n font-weight: var(--pst-sidebar-header-font-weight);\n font-size: var(--pst-sidebar-header-font-size);\n color: var(--pst-color-text-base);\n margin-bottom: 0.5rem;\n}\n.sidebar-indices-items ul.indices-link {\n margin-right: -1rem;\n list-style: none;\n padding: 0;\n}\n.sidebar-indices-items ul.indices-link li > a {\n display: block;\n padding: 0.25rem 0;\n color: var(--pst-color-text-muted);\n}\n.sidebar-indices-items ul.indices-link li > a:hover {\n color: var(--pst-color-primary);\n text-decoration: none;\n background-color: transparent;\n}\n\n.bd-sidebar-primary div#rtd-footer-container {\n position: sticky;\n bottom: -1rem;\n margin: -1rem;\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge {\n position: unset;\n font-size: 0.9em;\n font-family: var(--pst-font-family-base);\n max-width: unset;\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .rst-current-version {\n display: flex;\n align-items: center;\n gap: 0.2rem;\n height: 2.5rem;\n transition: background-color 0.2s ease-out;\n background-color: var(--pst-color-background);\n color: var(--pst-color-success);\n border-top: 1px solid var(--pst-color-border);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-book {\n color: var(--pst-color-text-muted);\n margin-right: auto;\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-book::after {\n color: var(--pst-color-text-base);\n content: \"Read The Docs\";\n font-family: var(--pst-font-family-base);\n font-weight: var(--pst-admonition-font-weight-heading);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge .fa.fa-caret-down {\n color: var(--pst-color-text-muted);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-versions.rst-badge.shift-up .rst-current-version {\n border-bottom: 1px solid var(--pst-color-border);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-other-versions {\n background-color: var(--pst-color-surface);\n color: var(--pst-color-text-base);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-other-versions dl dd a {\n color: var(--pst-color-text-muted);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-other-versions hr {\n background-color: var(--pst-color-border);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-other-versions small a, .bd-sidebar-primary div#rtd-footer-container .rst-other-versions .small a {\n color: var(--pst-color-link);\n}\n.bd-sidebar-primary div#rtd-footer-container .rst-other-versions input {\n padding-left: 0.5rem;\n border: 1px solid var(--pst-color-border);\n background-color: var(--pst-color-surface);\n}\n\n/**\n * Admonitions and blocks of styled content.\n * Admonitions CSS originally inspired by https://squidfunk.github.io/mkdocs-material/getting-started/\n */\ndiv.admonition,\n.admonition {\n margin: 1.5625em auto;\n padding: 0 0.6rem 0.8rem;\n overflow: hidden;\n /* break-inside has replaced page-break-inside and is widely usable since 2019 */\n page-break-inside: avoid;\n break-inside: avoid;\n border-left: 0.2rem solid;\n border-color: var(--pst-color-info);\n border-radius: 0.25rem;\n background-color: var(--pst-color-on-background);\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n /**\n * Special-case for a `sidebar` class that makes the admonition float to\n * the right like the {sidebar} directive.\n */\n}\ndiv.admonition *:last-child,\n.admonition *:last-child {\n margin-bottom: 0;\n}\ndiv.admonition p.admonition-title ~ *,\n.admonition p.admonition-title ~ * {\n margin-left: 1.4rem;\n margin-right: 1.4rem;\n}\ndiv.admonition > ol,\ndiv.admonition > ul,\n.admonition > ol,\n.admonition > ul {\n margin-left: 1em;\n}\ndiv.admonition > .admonition-title,\n.admonition > .admonition-title {\n margin: 0 -0.6rem;\n padding: 0.4rem 0.6rem 0.4rem 2rem;\n font-weight: var(--pst-admonition-font-weight-heading);\n position: relative;\n background-color: var(--pst-color-info-bg);\n z-index: 1;\n}\ndiv.admonition > .admonition-title::before,\n.admonition > .admonition-title::before {\n content: \"\";\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n z-index: -1;\n pointer-events: none;\n}\ndiv.admonition > .admonition-title::after,\n.admonition > .admonition-title::after {\n position: absolute;\n left: 0.5rem;\n width: 1rem;\n height: 1rem;\n color: var(--pst-color-info);\n font: var(--fa-font-solid);\n line-height: inherit;\n content: var(--pst-icon-admonition-default);\n opacity: 1;\n}\ndiv.admonition > .admonition-title + *,\n.admonition > .admonition-title + * {\n margin-top: 0.4em;\n}\ndiv.admonition.attention,\n.admonition.attention {\n border-color: var(--pst-color-attention);\n}\ndiv.admonition.attention > .admonition-title,\n.admonition.attention > .admonition-title {\n background-color: var(--pst-color-attention-bg);\n}\ndiv.admonition.attention > .admonition-title::after,\n.admonition.attention > .admonition-title::after {\n color: var(--pst-color-attention);\n content: var(--pst-icon-admonition-attention);\n}\ndiv.admonition.caution,\n.admonition.caution {\n border-color: var(--pst-color-warning);\n}\ndiv.admonition.caution > .admonition-title,\n.admonition.caution > .admonition-title {\n background-color: var(--pst-color-warning-bg);\n}\ndiv.admonition.caution > .admonition-title::after,\n.admonition.caution > .admonition-title::after {\n color: var(--pst-color-warning);\n content: var(--pst-icon-admonition-caution);\n}\ndiv.admonition.warning,\n.admonition.warning {\n border-color: var(--pst-color-warning);\n}\ndiv.admonition.warning > .admonition-title,\n.admonition.warning > .admonition-title {\n background-color: var(--pst-color-warning-bg);\n}\ndiv.admonition.warning > .admonition-title::after,\n.admonition.warning > .admonition-title::after {\n color: var(--pst-color-warning);\n content: var(--pst-icon-admonition-warning);\n}\ndiv.admonition.danger,\n.admonition.danger {\n border-color: var(--pst-color-danger);\n}\ndiv.admonition.danger > .admonition-title,\n.admonition.danger > .admonition-title {\n background-color: var(--pst-color-danger-bg);\n}\ndiv.admonition.danger > .admonition-title::after,\n.admonition.danger > .admonition-title::after {\n color: var(--pst-color-danger);\n content: var(--pst-icon-admonition-danger);\n}\ndiv.admonition.error,\n.admonition.error {\n border-color: var(--pst-color-danger);\n}\ndiv.admonition.error > .admonition-title,\n.admonition.error > .admonition-title {\n background-color: var(--pst-color-danger-bg);\n}\ndiv.admonition.error > .admonition-title::after,\n.admonition.error > .admonition-title::after {\n color: var(--pst-color-danger);\n content: var(--pst-icon-admonition-error);\n}\ndiv.admonition.hint,\n.admonition.hint {\n border-color: var(--pst-color-success);\n}\ndiv.admonition.hint > .admonition-title,\n.admonition.hint > .admonition-title {\n background-color: var(--pst-color-success-bg);\n}\ndiv.admonition.hint > .admonition-title::after,\n.admonition.hint > .admonition-title::after {\n color: var(--pst-color-success);\n content: var(--pst-icon-admonition-hint);\n}\ndiv.admonition.tip,\n.admonition.tip {\n border-color: var(--pst-color-success);\n}\ndiv.admonition.tip > .admonition-title,\n.admonition.tip > .admonition-title {\n background-color: var(--pst-color-success-bg);\n}\ndiv.admonition.tip > .admonition-title::after,\n.admonition.tip > .admonition-title::after {\n color: var(--pst-color-success);\n content: var(--pst-icon-admonition-tip);\n}\ndiv.admonition.important,\n.admonition.important {\n border-color: var(--pst-color-attention);\n}\ndiv.admonition.important > .admonition-title,\n.admonition.important > .admonition-title {\n background-color: var(--pst-color-attention-bg);\n}\ndiv.admonition.important > .admonition-title::after,\n.admonition.important > .admonition-title::after {\n color: var(--pst-color-attention);\n content: var(--pst-icon-admonition-important);\n}\ndiv.admonition.note,\n.admonition.note {\n border-color: var(--pst-color-info);\n}\ndiv.admonition.note > .admonition-title,\n.admonition.note > .admonition-title {\n background-color: var(--pst-color-info-bg);\n}\ndiv.admonition.note > .admonition-title::after,\n.admonition.note > .admonition-title::after {\n color: var(--pst-color-info);\n content: var(--pst-icon-admonition-note);\n}\ndiv.admonition.seealso,\n.admonition.seealso {\n border-color: var(--pst-color-success);\n}\ndiv.admonition.seealso > .admonition-title,\n.admonition.seealso > .admonition-title {\n background-color: var(--pst-color-success-bg);\n}\ndiv.admonition.seealso > .admonition-title::after,\n.admonition.seealso > .admonition-title::after {\n color: var(--pst-color-success);\n content: var(--pst-icon-admonition-seealso);\n}\ndiv.admonition.admonition-todo,\n.admonition.admonition-todo {\n border-color: var(--pst-color-secondary);\n}\ndiv.admonition.admonition-todo > .admonition-title,\n.admonition.admonition-todo > .admonition-title {\n background-color: var(--pst-color-secondary-bg);\n}\ndiv.admonition.admonition-todo > .admonition-title::after,\n.admonition.admonition-todo > .admonition-title::after {\n color: var(--pst-color-secondary);\n content: var(--pst-icon-admonition-todo);\n}\ndiv.admonition.sidebar,\n.admonition.sidebar {\n max-width: 40%;\n float: right;\n clear: both;\n margin-left: 0.5rem;\n margin-top: 0;\n border-width: 0 0 0 0.2rem;\n}\ndiv.admonition.sidebar.attention, div.admonition.sidebar.important,\n.admonition.sidebar.attention,\n.admonition.sidebar.important {\n border-color: var(--pst-color-attention);\n}\ndiv.admonition.sidebar.caution, div.admonition.sidebar.warning,\n.admonition.sidebar.caution,\n.admonition.sidebar.warning {\n border-color: var(--pst-color-warning);\n}\ndiv.admonition.sidebar.danger, div.admonition.sidebar.error,\n.admonition.sidebar.danger,\n.admonition.sidebar.error {\n border-color: var(--pst-color-danger);\n}\ndiv.admonition.sidebar.hint, div.admonition.sidebar.tip, div.admonition.sidebar.seealso,\n.admonition.sidebar.hint,\n.admonition.sidebar.tip,\n.admonition.sidebar.seealso {\n border-color: var(--pst-color-success);\n}\ndiv.admonition.sidebar.note, div.admonition.sidebar.todo,\n.admonition.sidebar.note,\n.admonition.sidebar.todo {\n border-color: var(--pst-color-info);\n}\ndiv.admonition.sidebar p.admonition-title ~ *,\n.admonition.sidebar p.admonition-title ~ * {\n margin-left: 0;\n margin-right: 0;\n}\n\n/**************************************************************\n * Similar content blocks that are not technically admonitions.\n */\n/**\n * Topics and the {contents} directive\n */\ndiv.topic,\ndiv.topic.contents,\nnav.contents,\naside.topic {\n display: flex;\n flex-direction: column;\n background-color: var(--pst-color-surface);\n border-color: var(--pst-color-border);\n border-radius: 0.25rem;\n padding: 1rem 1.25rem;\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n}\ndiv.topic .topic-title,\ndiv.topic.contents .topic-title,\nnav.contents .topic-title,\naside.topic .topic-title {\n margin: 0 0 0.5rem;\n}\ndiv.topic p,\ndiv.topic.contents p,\nnav.contents p,\naside.topic p {\n color: var(--pst-color-on-surface) !important;\n}\ndiv.topic ul.simple,\ndiv.topic.contents ul.simple,\nnav.contents ul.simple,\naside.topic ul.simple {\n padding-left: 1rem;\n}\ndiv.topic ul.simple ul,\ndiv.topic.contents ul.simple ul,\nnav.contents ul.simple ul,\naside.topic ul.simple ul {\n padding-left: 2em;\n}\n\n/**\n * Sidebar directive\n */\naside.sidebar {\n border: 1px solid var(--pst-color-border);\n background-color: var(--pst-color-surface);\n border-radius: 0.25rem;\n margin-left: 0.5rem;\n padding: 0;\n}\naside.sidebar > *:last-child {\n padding-bottom: 1rem;\n}\naside.sidebar p.sidebar-title {\n position: relative;\n margin-bottom: 0;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n border-bottom: 1px solid var(--pst-color-border);\n font-family: var(--pst-font-family-heading);\n font-weight: var(--pst-admonition-font-weight-heading);\n}\naside.sidebar > *:not(.sidebar-title):first-child,\naside.sidebar > p.sidebar-title + * {\n margin-top: 1rem;\n}\naside.sidebar > * {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n/**\n * Rubrics look kind of like section headers\n */\np.rubric {\n display: flex;\n flex-direction: column;\n}\n\n/**\n * Seealso is kind of like a vertically-collapsed admonition\n */\n.seealso dd {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n/*******************************************************************************\n* Styling for field lists\n*/\n/* grey highlighting of 'parameter' and 'returns' field */\ntable.field-list {\n border-collapse: separate;\n border-spacing: 10px;\n margin-left: 1px;\n /* italic font for parameter types */\n}\ntable.field-list th.field-name {\n padding: 1px 8px 1px 5px;\n white-space: nowrap;\n background-color: var(--pst-color-surface);\n}\ntable.field-list td.field-body {\n /* reduced space around parameter description */\n}\ntable.field-list td.field-body p {\n font-style: italic;\n}\ntable.field-list td.field-body p > strong {\n font-style: normal;\n}\ntable.field-list td.field-body blockquote {\n border-left: none;\n margin: 0 0 0.3em;\n padding-left: 30px;\n}\n\n/*******************************************************************************\n* Styling for autosummary tables\n*/\n.table.autosummary td:first-child {\n white-space: nowrap;\n}\n\n/* overriding basic.css to use our own monospace font */\n.sig {\n font-family: var(--pst-font-family-monospace);\n}\n\n/* C++ specific styling - overriding the basic.css to avoid custom colors */\n.sig-inline.c-texpr,\n.sig-inline.cpp-texpr {\n font-family: unset;\n}\n\n.sig.c .k,\n.sig.c .kt,\n.sig.cpp .k,\n.sig.cpp .kt {\n color: var(--pst-color-text-base);\n}\n\n.sig.c .m,\n.sig.cpp .m {\n color: var(--pst-color-text-base);\n}\n\n.sig.c .s,\n.sig.c .sc,\n.sig.cpp .s,\n.sig.cpp .sc {\n color: var(--pst-color-text-base);\n}\n\n.sig-name {\n color: var(--pst-color-inline-code);\n}\n\n.sig-param .o,\n.sig-param .default_value {\n color: var(--pst-color-text-muted);\n font-weight: normal;\n}\n\ndt:target,\nspan.highlighted {\n background-color: var(--pst-color-target);\n}\n\n.viewcode-back {\n font-family: var(--pst-font-family-base);\n}\n\n.viewcode-block:target {\n border-top: 1px solid var(--pst-color-border);\n border-bottom: 1px solid var(--pst-color-border);\n position: relative;\n background-color: var(--pst-color-target);\n}\n\ndl > dt > a:has(.viewcode-link) {\n float: right;\n}\ndl > dt > a:has(.viewcode-link) .viewcode-link {\n float: none;\n}\n\n/*******************************************************************************\n* Styling for autosummary titles like \"parameters\" and \"returns\"\n*/\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) {\n margin-bottom: 3rem;\n}\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) dd {\n margin-left: 2rem;\n}\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) dd > dl.simple > dt {\n display: flex;\n}\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) dl.field-list {\n display: grid;\n grid-template-columns: unset;\n}\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) dt.field-odd,\ndl[class]:not(.option-list, .field-list, .footnote, .glossary, .simple) dt.field-even {\n margin-top: 0.2rem;\n margin-bottom: 0.1rem;\n background-color: var(--pst-color-surface);\n}\n\n/**\n * Code block styling\n * Note that we inherit a lot of styling from Bootstrap so not many rules here.\n */\ndiv[class*=highlight-],\ndiv.highlight,\ndiv.literal-block-wrapper {\n display: flex;\n flex-direction: column;\n width: unset;\n border-radius: 0.25rem;\n break-inside: avoid;\n}\n\ndiv.literal-block-wrapper {\n border: 1px solid var(--pst-color-border);\n border-radius: 0.25rem;\n}\ndiv.literal-block-wrapper div.code-block-caption {\n margin: 0;\n border-bottom: 1px solid var(--pst-color-border);\n padding: 0.5rem;\n font-size: 1rem;\n font-weight: var(--pst-font-weight-caption);\n}\ndiv.literal-block-wrapper div.code-block-caption a.headerlink {\n font-size: inherit;\n}\ndiv.literal-block-wrapper div[class*=highlight-] {\n margin: 0;\n border-radius: 0;\n}\ndiv.literal-block-wrapper div[class*=highlight-] pre {\n border: none;\n box-shadow: none;\n}\n\n/**\n * In-line code\n */\ncode.literal {\n padding: 0.1rem 0.25rem;\n background-color: var(--pst-color-surface);\n border: 1px solid var(--pst-color-border);\n border-radius: 0.25rem;\n}\n\na > code {\n color: var(--pst-color-inline-code-links);\n}\na > code:hover {\n color: var(--pst-color-link-hover);\n}\n\nspan.linenos {\n opacity: 0.8 !important;\n}\n\nfigure > a,\nfigure > a > img,\nfigure > img,\nfigure > video {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\nfigure a.headerlink {\n position: absolute;\n font-size: inherit;\n}\nfigure:hover a.headerlink {\n visibility: visible;\n}\nfigure figcaption {\n font-family: var(--pst-font-family-heading);\n font-weight: var(--pst-font-weight-caption);\n color: var(--pst-color-text-muted);\n margin-left: auto;\n margin-right: auto;\n margin-top: 0.3rem;\n text-align: center;\n}\nfigure figcaption > p:last-child {\n margin-bottom: 0;\n}\nfigure figcaption p {\n text-align: start;\n display: inline-block;\n}\nfigure figcaption table.table {\n width: fit-content;\n margin-left: auto;\n margin-right: auto;\n}\n\ndt.label > span.brackets:not(:only-child)::before {\n content: \"[\";\n}\n\ndt.label > span.brackets:not(:only-child)::after {\n content: \"]\";\n}\n\na.footnote-reference {\n vertical-align: super;\n font-size: small;\n}\n\naside.footnote {\n margin-bottom: 0.5rem;\n}\naside.footnote:last-child {\n margin-bottom: 1rem;\n}\naside.footnote span.label,\naside.footnote span.backrefs {\n font-weight: bold;\n}\naside.footnote:target {\n background-color: var(--pst-color-target);\n}\n\n/**\n * Hacky fixes that don't fit cleanly into other sections\n */\ntable.highlighttable td.linenos,\nspan.linenos,\ndiv.doctest > div.highlight span.gp {\n /* gp: Generic.Prompt */\n user-select: none;\n}\n\ndd {\n margin-top: 3px;\n margin-bottom: 10px;\n margin-left: 30px;\n}\n\nol,\nul {\n padding-inline-start: 2rem;\n}\nol li > p:first-child,\nul li > p:first-child {\n margin-bottom: 0.25rem;\n margin-top: 0.25rem;\n}\n\nblockquote {\n padding: 1em;\n color: var(--pst-color-text-muted);\n border-left: 0.25em solid var(--pst-color-blockquote-notch);\n border-radius: 0.25rem;\n position: relative;\n background-color: var(--pst-color-surface);\n}\nblockquote p {\n color: var(--pst-color-text-base);\n}\nblockquote .line-block {\n margin: 0;\n}\nblockquote p:last-child {\n margin-bottom: 0;\n}\nblockquote::before {\n content: \"\";\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n z-index: -1;\n pointer-events: none;\n}\nblockquote a {\n color: var(--pst-color-inline-code-links);\n}\nblockquote::before {\n z-index: -1;\n}\n\n/**\n * Span-level styling within content\n */\nspan.guilabel {\n border: 1px solid var(--pst-color-info);\n font-size: 80%;\n font-weight: 700;\n border-radius: 4px;\n padding: 2.4px 6px;\n margin: auto 2px;\n position: relative;\n background-color: var(--pst-color-info-bg);\n}\nspan.guilabel::before {\n content: \"\";\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n z-index: -1;\n pointer-events: none;\n}\n\na.reference.download::before {\n content: var(--pst-icon-download);\n font: var(--fa-font-solid);\n font-size: 0.8em;\n padding: 0 0.25em;\n color: var(--pst-color-text-muted);\n}\n\n/**\n * Tables\n */\ntable {\n margin-left: auto;\n margin-right: auto;\n}\ntable.table-right {\n margin-right: 0;\n}\ntable.table-left {\n margin-left: 0;\n}\n\ntable caption {\n text-align: center;\n caption-side: top;\n color: var(--pst-color-text-muted);\n}\n\nth.text-left,\ntd.text-left {\n text-align: left;\n}\nth.text-right,\ntd.text-right {\n text-align: right;\n}\nth.text-center,\ntd.text-center {\n text-align: center;\n}\n\n.table {\n color: var(--pst-color-table);\n border: 1px solid var(--pst-color-table-outer-border);\n --bs-table-bg: transparent;\n --bs-table-color: var(\n --pst-color-text-base\n );\n}\n.table th ~ th,\n.table th ~ td,\n.table td ~ th,\n.table td ~ td {\n border-left: 1px solid var(--pst-color-table-inner-border);\n}\n.table thead tr {\n background-color: var(--pst-color-table-heading-bg);\n border-bottom: 2px solid var(--pst-color-primary);\n}\n.table tbody tr:nth-child(odd) {\n background-color: var(--pst-color-table-row-zebra-low-bg);\n}\n.table tbody tr:nth-child(even) {\n background-color: var(--pst-color-table-row-zebra-high-bg);\n}\n.table tbody tr:hover {\n background-color: var(--pst-color-table-row-hover-bg);\n}\n\n.pst-scrollable-table-container {\n overflow-x: auto;\n}\n\n/**\n * Style the toctree component in pages (avoid modifying the navbars)\n */\n.toctree-wrapper p.caption {\n font-size: 1.5em;\n margin-bottom: 0;\n}\n.toctree-wrapper > ul {\n padding-left: 0;\n}\n.toctree-wrapper li[class^=toctree-l] {\n list-style: none;\n margin-bottom: 0.2em;\n}\n.toctree-wrapper li[class^=toctree-l] > a {\n list-style: none;\n font-size: 1.1em;\n}\n.toctree-wrapper li[class^=toctree-l] > ul {\n list-style: none;\n padding-inline-start: 1.5em;\n}\n.toctree-wrapper .toctree-l1 > a {\n font-size: 1.3em;\n}\n\ndiv.topic.contents ul.simple,\nnav.contents ul.simple {\n list-style: none;\n padding-left: 0;\n}\n\n/**\n * Mathematics via MathJax.\n *\n * This is designed for MathJax v3\n * ref: https://www.sphinx-doc.org/en/master/usage/extensions/math.html#module-sphinx.ext.mathjax\n */\nspan.math,\ndiv.math {\n align-items: center;\n display: flex;\n max-width: 100%;\n overflow: hidden;\n}\n\nspan.math {\n display: inline-flex;\n}\n\ndiv.math {\n gap: 0.5em;\n flex-direction: row-reverse;\n}\ndiv.math span.eqno a.headerlink {\n position: relative;\n font-size: 1em;\n}\ndiv.math mjx-container {\n flex-grow: 1;\n padding-bottom: 0.2rem;\n overflow: auto;\n}\ndiv.math mjx-container mjx-assistive-mml {\n height: 0;\n}\n\n/**\n * ABlog\n * ref: https://ablog.readthedocs.io/\n */\n/**\n * Sidebar template components\n */\n.ablog-sidebar-item h2, .ablog-sidebar-item .h2,\n.ablog-sidebar-item h3,\n.ablog-sidebar-item .h3 {\n font-size: var(--pst-sidebar-header-font-size);\n margin-top: 0.5rem;\n}\n.ablog-sidebar-item h2 a, .ablog-sidebar-item .h2 a,\n.ablog-sidebar-item h3 a,\n.ablog-sidebar-item .h3 a {\n color: var(--pst-color-text-base);\n}\n.ablog-sidebar-item ul {\n list-style: none;\n padding-left: 0;\n overflow-y: hidden;\n display: flex;\n flex-direction: column;\n gap: 0.5em;\n margin-bottom: 0;\n}\n.ablog-sidebar-item ul.ablog-cloud {\n flex-flow: row wrap;\n gap: 0.5rem;\n}\n.ablog-sidebar-item ul.ablog-cloud li {\n display: flex;\n align-items: center;\n}\n\n/**\n * Previous / next buttons at the bottom\n */\n.ablog__prev-next {\n font-size: 1.2em;\n display: flex;\n padding: 1rem 0;\n}\n.ablog__prev-next > span {\n display: flex;\n max-width: 45%;\n}\n.ablog__prev-next > span a {\n display: flex;\n align-items: center;\n margin-left: auto;\n gap: 1rem;\n line-height: 1.5rem;\n}\n.ablog__prev-next > span a i::before {\n color: var(--pst-color-text-base);\n}\n.ablog__prev-next span.ablog__prev i.fa-arrow-circle-left::before {\n content: var(--pst-icon-angle-left);\n}\n.ablog__prev-next span.ablog__spacer {\n display: none;\n}\n.ablog__prev-next span.ablog__next {\n margin-left: auto;\n text-align: right;\n}\n.ablog__prev-next span.ablog__next i.fa-arrow-circle-right::before {\n content: var(--pst-icon-angle-right);\n}\n\n/**\n * {postlist} directive and posts page\n */\n.ablog__collection,\n.postlist {\n padding-left: 0;\n}\n.ablog__collection .ablog-post,\n.postlist .ablog-post {\n list-style: none;\n}\n.ablog__collection .ablog-post .ablog-archive,\n.postlist .ablog-post .ablog-archive {\n display: flex;\n flex-flow: row wrap;\n gap: 1rem;\n list-style: none;\n font-size: 0.75rem;\n padding-left: 0;\n}\n.ablog__collection .ablog-post .ablog-post-title,\n.postlist .ablog-post .ablog-post-title {\n margin-top: 0;\n font-size: 1.25rem;\n}\n.ablog__collection .ablog-post .ablog-post-title a,\n.postlist .ablog-post .ablog-post-title a {\n font-weight: bold;\n}\n.ablog__collection .ablog-post .ablog-post-expand,\n.postlist .ablog-post .ablog-post-expand {\n margin-bottom: 0.5rem;\n}\n\n/**\n * Special cases for Bootstrap functionality\n */\n.docutils.container {\n padding-left: unset;\n padding-right: unset;\n margin-left: unset;\n margin-right: unset;\n max-width: unset;\n width: unset;\n}\n\n.btn {\n --bs-btn-focus-box-shadow: 0 0 0 0.1875rem var(--pst-color-accent);\n}\n\n/**\n * Sphinx Copybutton\n * ref: https://sphinx-copybutton.readthedocs.io/\n */\ndiv.highlight button.copybtn {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background-color: var(--pst-color-surface);\n}\ndiv.highlight button.copybtn:not(.success) {\n color: var(--pst-color-muted);\n}\ndiv.highlight button.copybtn:hover:not(.success) {\n color: var(--pst-color-text);\n background-color: var(--pst-color-shadow);\n}\ndiv.highlight button.copybtn.o-tooltip--left::after {\n color: var(--pst-color-text);\n background-color: var(--pst-color-surface);\n}\ndiv.highlight button.copybtn:focus {\n opacity: 1;\n}\ndiv.highlight button.copybtn:focus-visible {\n outline: var(--pst-color-accent) solid 0.1875rem;\n}\n\ndiv.highlight:has(button.copybtn) {\n min-height: 2em;\n}\n\n#ethical-ad-placement .ethical-sidebar a,\n#ethical-ad-placement .ethical-sidebar a:visited,\n#ethical-ad-placement .ethical-sidebar a:hover,\n#ethical-ad-placement .ethical-sidebar a:active,\n#ethical-ad-placement .ethical-footer a,\n#ethical-ad-placement .ethical-footer a:visited,\n#ethical-ad-placement .ethical-footer a:hover,\n#ethical-ad-placement .ethical-footer a:active {\n color: var(--pst-color-text-base);\n}\n#ethical-ad-placement .ethical-sidebar,\n#ethical-ad-placement .ethical-footer {\n background-color: var(--pst-color-background);\n border: 1px solid var(--pst-color-border);\n border-radius: 5px;\n color: var(--pst-color-text-base);\n font-size: 14px;\n line-height: 20px;\n}\n\n/**\n * Styles for various Sphinx execution libraries.\n * For now, where these define output sections, we simply revert their background\n * to be a \"light theme\" background. This ensures that inputs/outputs behave similarly,\n * because the CSS is often controlled by each package.\n * In the future, we might add dark theme support for specific packages.\n */\n/******************************************************************************\n * Jupyter Sphinx\n */\n.bd-content div.jupyter_container {\n border: none;\n background-color: unset;\n box-shadow: none;\n}\n.bd-content div.jupyter_container div.output,\n.bd-content div.jupyter_container div.highlight {\n border-radius: 0.25rem;\n}\n.bd-content div.jupyter_container div.highlight {\n background-color: var(--pst-color-surface);\n}\n.bd-content div.jupyter_container .cell_input,\n.bd-content div.jupyter_container .cell_output {\n border-radius: 0.25rem;\n}\n.bd-content div.jupyter_container .cell_input pre,\n.bd-content div.jupyter_container .cell_output pre {\n padding: 1rem;\n}\n\n/* Styles for graphviz generated output from Sphinx */\n/* Style the inheritance diagram such that it has a dark mode */\nhtml[data-theme=dark] div.graphviz > object.inheritance {\n filter: brightness(0.8) invert(0.82) contrast(1.2);\n color-scheme: normal;\n}\n\n/**\n * Special-cases for packages in the PyData ecosystem\n */\n.xr-wrap[hidden] {\n display: block !important;\n}\n\n.jp-OutputArea-output.lm-Widget {\n overflow: auto;\n}\n\n/*******************************************************************************\n* master color map. Only the colors that actually differ between light and dark\n* themes are specified separately.\n*\n* To see the full list of colors see https://www.figma.com/file/rUrrHGhUBBIAAjQ82x6pz9/PyData-Design-system---proposal-for-implementation-(2)?node-id=1234%3A765&t=ifcFT1JtnrSshGfi-1\n*/\n/**\n* Function to get items from nested maps\n*/\n/* Assign base colors for the PyData theme */\n:root {\n --pst-teal-50: #f4fbfc;\n --pst-teal-100: #e9f6f8;\n --pst-teal-200: #d0ecf1;\n --pst-teal-300: #abdde6;\n --pst-teal-400: #3fb1c5;\n --pst-teal-500: #0a7d91;\n --pst-teal-600: #085d6c;\n --pst-teal-700: #064752;\n --pst-teal-800: #042c33;\n --pst-teal-900: #021b1f;\n --pst-violet-50: #f4eefb;\n --pst-violet-100: #e0c7ff;\n --pst-violet-200: #d5b4fd;\n --pst-violet-300: #b780ff;\n --pst-violet-400: #9c5ffd;\n --pst-violet-500: #8045e5;\n --pst-violet-600: #6432bd;\n --pst-violet-700: #4b258f;\n --pst-violet-800: #341a61;\n --pst-violet-900: #1e0e39;\n --pst-gray-50: #f9f9fa;\n --pst-gray-100: #f3f4f5;\n --pst-gray-200: #e5e7ea;\n --pst-gray-300: #d1d5da;\n --pst-gray-400: #9ca4af;\n --pst-gray-500: #677384;\n --pst-gray-600: #48566b;\n --pst-gray-700: #29313d;\n --pst-gray-800: #222832;\n --pst-gray-900: #14181e;\n --pst-pink-50: #fcf8fd;\n --pst-pink-100: #fcf0fa;\n --pst-pink-200: #f8dff5;\n --pst-pink-300: #f3c7ee;\n --pst-pink-400: #e47fd7;\n --pst-pink-500: #c132af;\n --pst-pink-600: #912583;\n --pst-pink-700: #6e1c64;\n --pst-pink-800: #46123f;\n --pst-pink-900: #2b0b27;\n --pst-foundation-white: #ffffff;\n --pst-foundation-black: #14181e;\n}\n\n/*******************************************************************************\n* write the color rules for each theme (light/dark)\n*/\n/* NOTE:\n * Mixins enable us to reuse the same definitions for the different modes\n * https://sass-lang.com/documentation/at-rules/mixin\n * something inserts a variable into a CSS selector or property name\n * https://sass-lang.com/documentation/interpolation\n */\n/* Defaults to light mode if data-theme is not set */\nhtml:not([data-theme]) {\n --pst-color-primary: #0a7d91;\n --pst-color-primary-bg: #d0ecf1;\n --pst-color-secondary: #8045e5;\n --pst-color-secondary-bg: #e0c7ff;\n --pst-color-accent: #c132af;\n --pst-color-accent-bg: #f8dff5;\n --pst-color-info: #276be9;\n --pst-color-info-bg: #dce7fc;\n --pst-color-warning: #f66a0a;\n --pst-color-warning-bg: #f8e3d0;\n --pst-color-success: #00843f;\n --pst-color-success-bg: #d6ece1;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #d72d47;\n --pst-color-danger-bg: #f9e1e4;\n --pst-color-text-base: #222832;\n --pst-color-text-muted: #48566b;\n --pst-color-heading-color: #fff;\n --pst-color-shadow: rgba(0, 0, 0, 0.1);\n --pst-color-border: #d1d5da;\n --pst-color-border-muted: rgba(23, 23, 26, 0.2);\n --pst-color-blockquote-notch: #677384;\n --pst-color-inline-code: #912583;\n --pst-color-inline-code-links: #085d6c;\n --pst-color-target: #f3cf95;\n --pst-color-table: #14181e;\n --pst-color-table-row-hover-bg: #b780ff;\n --pst-color-table-inner-border: #e5e7ea;\n --pst-color-background: #ffffff;\n --pst-color-on-background: #ffffff;\n --pst-color-surface: #f3f4f5;\n --pst-color-on-surface: #222832;\n}\n\nhtml:not([data-theme]) {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\n\nhtml:not([data-theme]) .only-dark,\nhtml:not([data-theme]) .only-dark ~ figcaption {\n display: none !important;\n}\n\n/* NOTE: @each {...} is like a for-loop\n * https://sass-lang.com/documentation/at-rules/control/each\n */\nhtml[data-theme=light] {\n --pst-color-primary: #0a7d91;\n --pst-color-primary-bg: #d0ecf1;\n --pst-color-secondary: #8045e5;\n --pst-color-secondary-bg: #e0c7ff;\n --pst-color-accent: #c132af;\n --pst-color-accent-bg: #f8dff5;\n --pst-color-info: #276be9;\n --pst-color-info-bg: #dce7fc;\n --pst-color-warning: #f66a0a;\n --pst-color-warning-bg: #f8e3d0;\n --pst-color-success: #00843f;\n --pst-color-success-bg: #d6ece1;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #d72d47;\n --pst-color-danger-bg: #f9e1e4;\n --pst-color-text-base: #222832;\n --pst-color-text-muted: #48566b;\n --pst-color-heading-color: #fff;\n --pst-color-shadow: rgba(0, 0, 0, 0.1);\n --pst-color-border: #d1d5da;\n --pst-color-border-muted: rgba(23, 23, 26, 0.2);\n --pst-color-blockquote-notch: #677384;\n --pst-color-inline-code: #912583;\n --pst-color-inline-code-links: #085d6c;\n --pst-color-target: #f3cf95;\n --pst-color-table: #14181e;\n --pst-color-table-row-hover-bg: #b780ff;\n --pst-color-table-inner-border: #e5e7ea;\n --pst-color-background: #ffffff;\n --pst-color-on-background: #ffffff;\n --pst-color-surface: #f3f4f5;\n --pst-color-on-surface: #222832;\n color-scheme: light;\n}\n\nhtml[data-theme=light] {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\n\nhtml[data-theme=light] .only-dark,\nhtml[data-theme=light] .only-dark ~ figcaption {\n display: none !important;\n}\n\nhtml[data-theme=dark] {\n --pst-color-primary: #3fb1c5;\n --pst-color-primary-bg: #042c33;\n --pst-color-secondary: #9c5ffd;\n --pst-color-secondary-bg: #341a61;\n --pst-color-accent: #e47fd7;\n --pst-color-accent-bg: #46123f;\n --pst-color-info: #79a3f2;\n --pst-color-info-bg: #06245d;\n --pst-color-warning: #ff9245;\n --pst-color-warning-bg: #652a02;\n --pst-color-success: #5fb488;\n --pst-color-success-bg: #002f17;\n --pst-color-attention: var(--pst-color-warning);\n --pst-color-attention-bg: var(--pst-color-warning-bg);\n --pst-color-danger: #e78894;\n --pst-color-danger-bg: #4e111b;\n --pst-color-text-base: #ced6dd;\n --pst-color-text-muted: #9ca4af;\n --pst-color-heading-color: #14181e;\n --pst-color-shadow: rgba(0, 0, 0, 0.2);\n --pst-color-border: #48566b;\n --pst-color-border-muted: #29313d;\n --pst-color-blockquote-notch: #9ca4af;\n --pst-color-inline-code: #f3c7ee;\n --pst-color-inline-code-links: #3fb1c5;\n --pst-color-target: #675c04;\n --pst-color-table: #ffffff;\n --pst-color-table-row-hover-bg: #6432bd;\n --pst-color-table-inner-border: #364150;\n --pst-color-background: #14181e;\n --pst-color-on-background: #222832;\n --pst-color-surface: #29313d;\n --pst-color-on-surface: #f3f4f5;\n /* Adjust images in dark mode (unless they have class .only-dark or\n * .dark-light, in which case assume they're already optimized for dark\n * mode).\n */\n /* Give images a light background in dark mode in case they have\n * transparency and black text (unless they have class .only-dark or .dark-light, in\n * which case assume they're already optimized for dark mode).\n */\n color-scheme: dark;\n}\n\nhtml[data-theme=dark] {\n --pst-color-link: var(--pst-color-primary);\n --pst-color-link-hover: var(--pst-color-secondary);\n --pst-color-table-outer-border: var(--pst-color-surface);\n --pst-color-table-heading-bg: var(--pst-color-surface);\n --pst-color-table-row-zebra-high-bg: var(--pst-color-on-background);\n --pst-color-table-row-zebra-low-bg: var(--pst-color-surface);\n}\n\nhtml[data-theme=dark] .only-light,\nhtml[data-theme=dark] .only-light ~ figcaption {\n display: none !important;\n}\n\nhtml[data-theme=dark] img:not(.only-dark, .dark-light) {\n filter: brightness(0.8) contrast(1.2);\n}\n\nhtml[data-theme=dark] .bd-content img:not(.only-dark, .dark-light) {\n background-color: rgb(255, 255, 255);\n border-radius: 0.25rem;\n}\n\nhtml[data-theme=dark] .MathJax_SVG * {\n fill: var(--pst-color-text-base);\n}\n\n.pst-color-primary {\n color: var(--pst-color-primary);\n}\n\n.pst-color-secondary {\n color: var(--pst-color-secondary);\n}\n\n.pst-color-accent {\n color: var(--pst-color-accent);\n}\n\n.pst-color-info {\n color: var(--pst-color-info);\n}\n\n.pst-color-warning {\n color: var(--pst-color-warning);\n}\n\n.pst-color-success {\n color: var(--pst-color-success);\n}\n\n.pst-color-attention {\n color: var(--pst-color-attention);\n}\n\n.pst-color-danger {\n color: var(--pst-color-danger);\n}\n\n.pst-color-text-base {\n color: var(--pst-color-text-base);\n}\n\n.pst-color-text-muted {\n color: var(--pst-color-text-muted);\n}\n\n.pst-color-heading-color {\n color: var(--pst-color-heading-color);\n}\n\n.pst-color-shadow {\n color: var(--pst-color-shadow);\n}\n\n.pst-color-border {\n color: var(--pst-color-border);\n}\n\n.pst-color-border-muted {\n color: var(--pst-color-border-muted);\n}\n\n.pst-color-blockquote-notch {\n color: var(--pst-color-blockquote-notch);\n}\n\n.pst-color-inline-code {\n color: var(--pst-color-inline-code);\n}\n\n.pst-color-inline-code-links {\n color: var(--pst-color-inline-code-links);\n}\n\n.pst-color-target {\n color: var(--pst-color-target);\n}\n\n.pst-color-table {\n color: var(--pst-color-table);\n}\n\n.pst-color-table-row-hover {\n color: var(--pst-color-table-row-hover);\n}\n\n.pst-color-table-inner-border {\n color: var(--pst-color-table-inner-border);\n}\n\n.pst-color-background {\n color: var(--pst-color-background);\n}\n\n.pst-color-on-background {\n color: var(--pst-color-on-background);\n}\n\n.pst-color-surface {\n color: var(--pst-color-surface);\n}\n\n.pst-color-on-surface {\n color: var(--pst-color-on-surface);\n}\n\n/*******************************************************************************\n * Color and variables\n *\n * This is a list of the semantic color names from sphinx-design (we only\n * need to override variables that sphinx-design has actually defined).\n * https://github.com/executablebooks/sphinx-design/blob/9226a12a/style/_colors.scss#L31-L43\n */\n/**\n * Here we create some extra --pst-color-* variables and use\n * them to override the value of the corresponding sphinx-design variables.\n * This is easier than re-writing the sphinx-design rules. Even easier would be\n * directly assigning our values to the --sd-color-* variables, but then our\n * downstream users couldn't override *our* colors and have it affect buttons\n * and badges.\n *\n * First, define the extra keys needed to cover the full range of semantic\n * color names used in sphinx-design, then merge them with the names we\n * already define for our own needs.\n * see https://sphinx-design.readthedocs.io/en/latest/css_variables.html\n */\nhtml[data-theme=light] {\n --pst-color-primary: rgb(10, 125, 145);\n --pst-color-primary-text: #fff;\n --pst-color-primary-highlight: #086b7c;\n --sd-color-primary: var(--pst-color-primary);\n --sd-color-primary-text: var(--pst-color-primary-text);\n --sd-color-primary-highlight: var(--pst-color-primary-highlight);\n --pst-color-primary-highlight-text: #fff;\n --sd-color-primary-bg: #d0ecf1;\n --sd-color-primary-bg-text: #14181e;\n --pst-color-secondary: rgb(128, 69, 229);\n --pst-color-secondary-text: #fff;\n --pst-color-secondary-highlight: #651ee0;\n --sd-color-secondary: var(--pst-color-secondary);\n --sd-color-secondary-text: var(--pst-color-secondary-text);\n --sd-color-secondary-highlight: var(--pst-color-secondary-highlight);\n --pst-color-secondary-highlight-text: #fff;\n --sd-color-secondary-bg: #e0c7ff;\n --sd-color-secondary-bg-text: #14181e;\n --pst-color-success: #00843f;\n --pst-color-success-text: #fff;\n --pst-color-success-highlight: #007036;\n --sd-color-success: var(--pst-color-success);\n --sd-color-success-text: var(--pst-color-success-text);\n --sd-color-success-highlight: var(--pst-color-success-highlight);\n --pst-color-success-highlight-text: #fff;\n --sd-color-success-bg: #d6ece1;\n --sd-color-success-bg-text: #14181e;\n --pst-color-info: #276be9;\n --pst-color-info-text: #fff;\n --pst-color-info-highlight: #1457d3;\n --sd-color-info: var(--pst-color-info);\n --sd-color-info-text: var(--pst-color-info-text);\n --sd-color-info-highlight: var(--pst-color-info-highlight);\n --pst-color-info-highlight-text: #fff;\n --sd-color-info-bg: #dce7fc;\n --sd-color-info-bg-text: #14181e;\n --pst-color-warning: #f66a0a;\n --pst-color-warning-text: #14181e;\n --pst-color-warning-highlight: #d25a07;\n --sd-color-warning: var(--pst-color-warning);\n --sd-color-warning-text: var(--pst-color-warning-text);\n --sd-color-warning-highlight: var(--pst-color-warning-highlight);\n --pst-color-warning-highlight-text: #14181e;\n --sd-color-warning-bg: #f8e3d0;\n --sd-color-warning-bg-text: #14181e;\n --pst-color-danger: #d72d47;\n --pst-color-danger-text: #fff;\n --pst-color-danger-highlight: #bb2239;\n --sd-color-danger: var(--pst-color-danger);\n --sd-color-danger-text: var(--pst-color-danger-text);\n --sd-color-danger-highlight: var(--pst-color-danger-highlight);\n --pst-color-danger-highlight-text: #fff;\n --sd-color-danger-bg: #f9e1e4;\n --sd-color-danger-bg-text: #14181e;\n --pst-color-light: #f3f4f5;\n --pst-color-light-text: #14181e;\n --pst-color-light-highlight: #c9cfd6;\n --sd-color-light: var(--pst-color-light);\n --sd-color-light-text: var(--pst-color-light-text);\n --sd-color-light-highlight: var(--pst-color-light-highlight);\n --pst-color-light-highlight-text: #14181e;\n --sd-color-light-bg: #f7f7f8;\n --sd-color-light-bg-text: #14181e;\n --pst-color-muted: #29313d;\n --pst-color-muted-text: #fff;\n --pst-color-muted-highlight: #212936;\n --sd-color-muted: var(--pst-color-muted);\n --sd-color-muted-text: var(--pst-color-muted-text);\n --sd-color-muted-highlight: var(--pst-color-muted-highlight);\n --pst-color-muted-highlight-text: #fff;\n --sd-color-muted-bg: #5a6c86;\n --sd-color-muted-bg-text: #fff;\n --pst-color-dark: #222832;\n --pst-color-dark-text: #fff;\n --pst-color-dark-highlight: #1b222c;\n --sd-color-dark: var(--pst-color-dark);\n --sd-color-dark-text: var(--pst-color-dark-text);\n --sd-color-dark-highlight: var(--pst-color-dark-highlight);\n --pst-color-dark-highlight-text: #fff;\n --pst-color-black: #14181e;\n --pst-color-black-text: #fff;\n --pst-color-black-highlight: #10141a;\n --sd-color-black: var(--pst-color-black);\n --sd-color-black-text: var(--pst-color-black-text);\n --sd-color-black-highlight: var(--pst-color-black-highlight);\n --pst-color-black-highlight-text: #fff;\n --pst-color-white: #fff;\n --pst-color-white-text: #14181e;\n --pst-color-white-highlight: #dbd7d7;\n --sd-color-white: var(--pst-color-white);\n --sd-color-white-text: var(--pst-color-white-text);\n --sd-color-white-highlight: var(--pst-color-white-highlight);\n --pst-color-white-highlight-text: #14181e;\n}\n\nhtml[data-theme=dark] {\n --pst-color-primary: rgb(63, 177, 197);\n --pst-color-primary-text: #14181e;\n --pst-color-primary-highlight: #319aac;\n --sd-color-primary: var(--pst-color-primary);\n --sd-color-primary-text: var(--pst-color-primary-text);\n --sd-color-primary-highlight: var(--pst-color-primary-highlight);\n --pst-color-primary-highlight-text: #14181e;\n --sd-color-primary-bg: #042c33;\n --sd-color-primary-bg-text: #fff;\n --pst-color-secondary: rgb(156, 95, 253);\n --pst-color-secondary-text: #14181e;\n --pst-color-secondary-highlight: #7c2bfc;\n --sd-color-secondary: var(--pst-color-secondary);\n --sd-color-secondary-text: var(--pst-color-secondary-text);\n --sd-color-secondary-highlight: var(--pst-color-secondary-highlight);\n --pst-color-secondary-highlight-text: #fff;\n --sd-color-secondary-bg: #341a61;\n --sd-color-secondary-bg-text: #fff;\n --pst-color-success: #5fb488;\n --pst-color-success-text: #14181e;\n --pst-color-success-highlight: #47a373;\n --sd-color-success: var(--pst-color-success);\n --sd-color-success-text: var(--pst-color-success-text);\n --sd-color-success-highlight: var(--pst-color-success-highlight);\n --pst-color-success-highlight-text: #14181e;\n --sd-color-success-bg: #002f17;\n --sd-color-success-bg-text: #fff;\n --pst-color-info: #79a3f2;\n --pst-color-info-text: #14181e;\n --pst-color-info-highlight: #4681ee;\n --sd-color-info: var(--pst-color-info);\n --sd-color-info-text: var(--pst-color-info-text);\n --sd-color-info-highlight: var(--pst-color-info-highlight);\n --pst-color-info-highlight-text: #14181e;\n --sd-color-info-bg: #06245d;\n --sd-color-info-bg-text: #fff;\n --pst-color-warning: #ff9245;\n --pst-color-warning-text: #14181e;\n --pst-color-warning-highlight: #ff7614;\n --sd-color-warning: var(--pst-color-warning);\n --sd-color-warning-text: var(--pst-color-warning-text);\n --sd-color-warning-highlight: var(--pst-color-warning-highlight);\n --pst-color-warning-highlight-text: #14181e;\n --sd-color-warning-bg: #652a02;\n --sd-color-warning-bg-text: #fff;\n --pst-color-danger: #e78894;\n --pst-color-danger-text: #14181e;\n --pst-color-danger-highlight: #df596a;\n --sd-color-danger: var(--pst-color-danger);\n --sd-color-danger-text: var(--pst-color-danger-text);\n --sd-color-danger-highlight: var(--pst-color-danger-highlight);\n --pst-color-danger-highlight-text: #14181e;\n --sd-color-danger-bg: #4e111b;\n --sd-color-danger-bg-text: #fff;\n --pst-color-light: #f3f4f5;\n --pst-color-light-text: #14181e;\n --pst-color-light-highlight: #c9cfd6;\n --sd-color-light: var(--pst-color-light);\n --sd-color-light-text: var(--pst-color-light-text);\n --sd-color-light-highlight: var(--pst-color-light-highlight);\n --pst-color-light-highlight-text: #14181e;\n --sd-color-light-bg: #a3abb2;\n --sd-color-light-bg-text: #14181e;\n --pst-color-muted: #f3f4f5;\n --pst-color-muted-text: #14181e;\n --pst-color-muted-highlight: #c9cfd6;\n --sd-color-muted: var(--pst-color-muted);\n --sd-color-muted-text: var(--pst-color-muted-text);\n --sd-color-muted-highlight: var(--pst-color-muted-highlight);\n --pst-color-muted-highlight-text: #14181e;\n --sd-color-muted-bg: #1d222b;\n --sd-color-muted-bg-text: #fff;\n --pst-color-dark: #222832;\n --pst-color-dark-text: #fff;\n --pst-color-dark-highlight: #1b222c;\n --sd-color-dark: var(--pst-color-dark);\n --sd-color-dark-text: var(--pst-color-dark-text);\n --sd-color-dark-highlight: var(--pst-color-dark-highlight);\n --pst-color-dark-highlight-text: #fff;\n --pst-color-black: #14181e;\n --pst-color-black-text: #fff;\n --pst-color-black-highlight: #10141a;\n --sd-color-black: var(--pst-color-black);\n --sd-color-black-text: var(--pst-color-black-text);\n --sd-color-black-highlight: var(--pst-color-black-highlight);\n --pst-color-black-highlight-text: #fff;\n --pst-color-white: #fff;\n --pst-color-white-text: #14181e;\n --pst-color-white-highlight: #dbd7d7;\n --sd-color-white: var(--pst-color-white);\n --sd-color-white-text: var(--pst-color-white-text);\n --sd-color-white-highlight: var(--pst-color-white-highlight);\n --pst-color-white-highlight-text: #14181e;\n}\n\nhtml[data-theme=light] {\n --sd-color-card-border: var(--pst-color-border);\n}\n\nhtml[data-theme=dark] {\n --sd-color-card-border: var(--pst-color-border);\n}\n\n/*******************************************************************************\n * shadows\n */\nhtml[data-theme=light] .sd-shadow-xs,\nhtml[data-theme=light] .sd-shadow-sm,\nhtml[data-theme=light] .sd-shadow-md,\nhtml[data-theme=light] .sd-shadow-lg {\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n}\n\n/*******************************************************************************\n * cards\n */\n.bd-content .sd-card {\n border: 1px solid var(--pst-color-border);\n}\n.bd-content .sd-card .sd-card-header {\n background-color: var(--pst-color-panel-background);\n border-bottom: 1px solid var(--pst-color-border);\n}\n.bd-content .sd-card .sd-card-footer {\n background-color: var(--pst-color-panel-background);\n border-top: 1px solid var(--pst-color-border);\n}\n.bd-content .sd-card .sd-card-body {\n background-color: var(--pst-color-panel-background);\n}\n.bd-content .sd-card .sd-stretched-link:focus-visible {\n outline: none;\n}\n.bd-content .sd-card .sd-stretched-link:focus-visible::after {\n outline: var(--pst-color-accent) solid 0.1875rem;\n border-radius: 0.25rem;\n}\n.bd-content .sd-card.sd-card-hover:hover {\n border-color: var(--pst-color-link-hover);\n}\n\n/*******************************************************************************\n * tabs\n */\n.bd-content .sd-tab-set > input:checked + label {\n border-style: solid solid none;\n border-color: var(--pst-color-primary) var(--pst-color-primary) transparent;\n border-width: 0.125rem 0.125rem 0;\n border-radius: 0.125rem 0.125rem 0 0;\n background-color: var(--pst-color-on-background);\n transform: translateY(0.125rem);\n color: var(--pst-color-primary);\n}\n.bd-content .sd-tab-set > input:focus-visible + label {\n border: 0.125rem solid var(--pst-color-accent);\n border-radius: 0.125rem;\n background-color: var(--pst-color-accent-bg);\n color: var(--pst-color-on-surface);\n}\n.bd-content .sd-tab-set > input:not(:checked, :focus-visible) + label:hover {\n border-color: transparent;\n color: var(--pst-color-secondary);\n text-decoration-line: underline;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n}\n.bd-content .sd-tab-set > label {\n color: var(--pst-color-on-surface);\n border: 0.125rem solid transparent;\n border-radius: 0.125rem 0.125rem 0 0;\n background-color: var(--pst-color-surface);\n padding: 0 0.75em;\n margin-inline-end: 0.25rem;\n line-height: 1.95;\n}\nhtml[data-theme=dark] .bd-content .sd-tab-set > label {\n background-color: var(--pst-color-on-background);\n}\n.bd-content .sd-tab-set .sd-tab-content {\n border: 0.125rem solid var(--pst-color-primary);\n border-radius: 0.1875rem;\n box-shadow: unset;\n padding: 0.625rem;\n background-color: var(--pst-color-on-background);\n}\n\n/*******************************************************************************\n* Dropdowns\n*/\ndetails.sd-dropdown {\n border: 0 !important;\n box-shadow: 0 0.2rem 0.5rem var(--pst-color-shadow), 0 0 0.0625rem var(--pst-color-shadow) !important;\n}\ndetails.sd-dropdown summary.sd-card-header {\n border: 0 !important;\n display: flex;\n align-items: center;\n position: relative;\n font-weight: 600;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n --pst-sd-dropdown-color: var(--pst-gray-500);\n --pst-sd-dropdown-bg-color: var(--pst-color-surface);\n background-color: var(--pst-sd-dropdown-bg-color) !important;\n border-left: 0.2rem solid var(--pst-sd-dropdown-color) !important;\n}\ndetails.sd-dropdown summary.sd-card-header + div.sd-summary-content {\n border: 0;\n --pst-sd-dropdown-color: var(--sd-color-card-border);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-primary {\n --pst-sd-dropdown-color: var(--sd-color-primary);\n --pst-sd-dropdown-bg-color: var(--sd-color-primary-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-primary + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-primary);\n --pst-sd-dropdown-bg-color: var(--sd-color-primary-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-primary {\n color: var(--sd-color-primary-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-secondary {\n --pst-sd-dropdown-color: var(--sd-color-secondary);\n --pst-sd-dropdown-bg-color: var(--sd-color-secondary-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-secondary + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-secondary);\n --pst-sd-dropdown-bg-color: var(--sd-color-secondary-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-secondary {\n color: var(--sd-color-secondary-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-success {\n --pst-sd-dropdown-color: var(--sd-color-success);\n --pst-sd-dropdown-bg-color: var(--sd-color-success-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-success + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-success);\n --pst-sd-dropdown-bg-color: var(--sd-color-success-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-success {\n color: var(--sd-color-success-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-info {\n --pst-sd-dropdown-color: var(--sd-color-info);\n --pst-sd-dropdown-bg-color: var(--sd-color-info-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-info + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-info);\n --pst-sd-dropdown-bg-color: var(--sd-color-info-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-info {\n color: var(--sd-color-info-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-warning {\n --pst-sd-dropdown-color: var(--sd-color-warning);\n --pst-sd-dropdown-bg-color: var(--sd-color-warning-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-warning + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-warning);\n --pst-sd-dropdown-bg-color: var(--sd-color-warning-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-warning {\n color: var(--sd-color-warning-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-danger {\n --pst-sd-dropdown-color: var(--sd-color-danger);\n --pst-sd-dropdown-bg-color: var(--sd-color-danger-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-danger + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-danger);\n --pst-sd-dropdown-bg-color: var(--sd-color-danger-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-danger {\n color: var(--sd-color-danger-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-light {\n --pst-sd-dropdown-color: var(--sd-color-light);\n --pst-sd-dropdown-bg-color: var(--sd-color-light-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-light + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-light);\n --pst-sd-dropdown-bg-color: var(--sd-color-light-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-light {\n color: var(--sd-color-light-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-muted {\n --pst-sd-dropdown-color: var(--sd-color-muted);\n --pst-sd-dropdown-bg-color: var(--sd-color-muted-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-muted + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-muted);\n --pst-sd-dropdown-bg-color: var(--sd-color-muted-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-muted {\n color: var(--sd-color-muted-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-dark {\n --pst-sd-dropdown-color: var(--sd-color-dark);\n --pst-sd-dropdown-bg-color: var(--sd-color-dark-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-dark + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-dark);\n --pst-sd-dropdown-bg-color: var(--sd-color-dark-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-dark {\n color: var(--sd-color-dark-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-black {\n --pst-sd-dropdown-color: var(--sd-color-black);\n --pst-sd-dropdown-bg-color: var(--sd-color-black-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-black + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-black);\n --pst-sd-dropdown-bg-color: var(--sd-color-black-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-black {\n color: var(--sd-color-black-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-white {\n --pst-sd-dropdown-color: var(--sd-color-white);\n --pst-sd-dropdown-bg-color: var(--sd-color-white-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-white + div.sd-summary-content {\n --pst-sd-dropdown-color: var(--sd-color-white);\n --pst-sd-dropdown-bg-color: var(--sd-color-white-bg);\n}\ndetails.sd-dropdown summary.sd-card-header.sd-bg-text-white {\n color: var(--sd-color-white-bg-text) !important;\n}\ndetails.sd-dropdown summary.sd-card-header::before {\n content: \"\";\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n z-index: -1;\n pointer-events: none;\n}\ndetails.sd-dropdown summary.sd-card-header + div.sd-summary-content {\n border-left: 0.2rem solid var(--pst-sd-dropdown-color) !important;\n border-bottom-left-radius: calc(0.25rem - 1px);\n background-color: var(--pst-color-on-background);\n}\ndetails.sd-dropdown summary.sd-card-header span.sd-summary-icon {\n display: inline-flex;\n align-items: center;\n color: var(--pst-sd-dropdown-color) !important;\n}\ndetails.sd-dropdown summary.sd-card-header span.sd-summary-icon svg {\n opacity: 1;\n}\ndetails.sd-dropdown summary.sd-card-header .sd-summary-up,\ndetails.sd-dropdown summary.sd-card-header .sd-summary-down {\n top: 0.7rem;\n}\ndetails.sd-dropdown summary.sd-card-header:focus-visible {\n outline: var(--pst-color-accent) solid 0.1875rem;\n outline-offset: -0.1875rem;\n}\n\n/*******************************************************************************\n* Buttons (which in Sphinx Design are actually links that look like buttons)\n* ref: https://sphinx-design.readthedocs.io/en/pydata-theme/badges_buttons.html#buttons\n*/\nhtml .sd-btn {\n min-width: 2.25rem;\n padding: 0.3125rem 0.75rem 0.4375rem;\n}\nhtml .sd-btn:hover {\n text-decoration: underline;\n text-decoration-thickness: max(1px, .0625rem);\n text-underline-offset: 0.1578em;\n text-decoration-thickness: max(3px, .1875rem, .12em);\n text-decoration-skip-ink: none;\n color: var(--pst-color-link-hover);\n text-decoration-thickness: 1px;\n}\nhtml .sd-btn-primary:hover {\n color: var(--pst-color-primary-highlight-text) !important;\n}\nhtml .sd-btn-secondary:hover {\n color: var(--pst-color-secondary-highlight-text) !important;\n}\nhtml .sd-btn-success:hover {\n color: var(--pst-color-success-highlight-text) !important;\n}\nhtml .sd-btn-info:hover {\n color: var(--pst-color-info-highlight-text) !important;\n}\nhtml .sd-btn-warning:hover {\n color: var(--pst-color-warning-highlight-text) !important;\n}\nhtml .sd-btn-danger:hover {\n color: var(--pst-color-danger-highlight-text) !important;\n}\nhtml .sd-btn-light:hover {\n color: var(--pst-color-light-highlight-text) !important;\n}\nhtml .sd-btn-muted:hover {\n color: var(--pst-color-muted-highlight-text) !important;\n}\nhtml .sd-btn-dark:hover {\n color: var(--pst-color-dark-highlight-text) !important;\n}\nhtml .sd-btn-black:hover {\n color: var(--pst-color-black-highlight-text) !important;\n}\nhtml .sd-btn-white:hover {\n color: var(--pst-color-white-highlight-text) !important;\n}\nhtml .sd-btn-primary:focus-visible,\nhtml .sd-btn-outline-primary:focus-visible {\n background-color: var(--sd-color-primary) !important;\n border-color: var(--sd-color-primary) !important;\n outline: var(--sd-color-primary) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-secondary:focus-visible,\nhtml .sd-btn-outline-secondary:focus-visible {\n background-color: var(--sd-color-secondary) !important;\n border-color: var(--sd-color-secondary) !important;\n outline: var(--sd-color-secondary) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-success:focus-visible,\nhtml .sd-btn-outline-success:focus-visible {\n background-color: var(--sd-color-success) !important;\n border-color: var(--sd-color-success) !important;\n outline: var(--sd-color-success) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-info:focus-visible,\nhtml .sd-btn-outline-info:focus-visible {\n background-color: var(--sd-color-info) !important;\n border-color: var(--sd-color-info) !important;\n outline: var(--sd-color-info) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-warning:focus-visible,\nhtml .sd-btn-outline-warning:focus-visible {\n background-color: var(--sd-color-warning) !important;\n border-color: var(--sd-color-warning) !important;\n outline: var(--sd-color-warning) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-danger:focus-visible,\nhtml .sd-btn-outline-danger:focus-visible {\n background-color: var(--sd-color-danger) !important;\n border-color: var(--sd-color-danger) !important;\n outline: var(--sd-color-danger) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-light:focus-visible,\nhtml .sd-btn-outline-light:focus-visible {\n background-color: var(--sd-color-light) !important;\n border-color: var(--sd-color-light) !important;\n outline: var(--sd-color-light) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-muted:focus-visible,\nhtml .sd-btn-outline-muted:focus-visible {\n background-color: var(--sd-color-muted) !important;\n border-color: var(--sd-color-muted) !important;\n outline: var(--sd-color-muted) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-dark:focus-visible,\nhtml .sd-btn-outline-dark:focus-visible {\n background-color: var(--sd-color-dark) !important;\n border-color: var(--sd-color-dark) !important;\n outline: var(--sd-color-dark) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-black:focus-visible,\nhtml .sd-btn-outline-black:focus-visible {\n background-color: var(--sd-color-black) !important;\n border-color: var(--sd-color-black) !important;\n outline: var(--sd-color-black) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\nhtml .sd-btn-white:focus-visible,\nhtml .sd-btn-outline-white:focus-visible {\n background-color: var(--sd-color-white) !important;\n border-color: var(--sd-color-white) !important;\n outline: var(--sd-color-white) solid 0.1875rem;\n outline-offset: 0.1875rem;\n}\n\n/**\n * Sphinx togglebutton\n */\n.bd-content .admonition button.toggle-button {\n color: inherit;\n}\n.bd-content .admonition button.toggle-button.toggle-button-hidden .toggle-chevron-right {\n transform: rotate(90deg);\n transition: none;\n}\n.bd-content .admonition button.toggle-button .toggle-chevron-right {\n transform: rotate(-90deg);\n transition: none;\n}\n.bd-content .admonition:focus-within {\n overflow: visible;\n}\n.bd-content .admonition:focus-within .admonition-title:focus-within::before {\n content: \"\";\n transform: translateX(-0.2rem);\n width: calc(100% + 0.2rem);\n height: 100%;\n border: var(--pst-color-accent) solid 0.1875rem;\n border-radius: 0.1875rem;\n}\n.bd-content .admonition:focus-within:not(.toggle-hidden) .admonition-title:focus-within::before {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n.bd-content details.toggle-details summary {\n border-left: 3px solid var(--pst-color-primary);\n}\n.bd-content details.toggle-details summary .toggle-chevron-right {\n transform: rotate(90deg);\n transition: none;\n}\n.bd-content details.toggle-details[open] .toggle-chevron-right {\n transform: rotate(-90deg);\n transition: none;\n}\n.bd-content details.toggle-details[open] :focus-visible {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n/**\n * Styles for various Sphinx execution libraries to display pre-executed notebooks.\n * For now, where these define output sections, we simply revert their background\n * to be a \"light theme\" background. This ensures that inputs/outputs behave similarly,\n * because the CSS is often controlled by each package.\n * In the future, we might add dark theme support for specific packages.\n */\n/*******************************************************************************\n * nbsphinx\n */\nhtml div.rendered_html,\nhtml .jp-RenderedHTMLCommon {\n margin: 0.1875rem;\n}\nhtml div.rendered_html table,\nhtml .jp-RenderedHTMLCommon table {\n table-layout: auto;\n}\n\n.bd-content .nboutput .output_area.rendered_html table.dataframe,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe {\n color: var(--pst-color-table);\n border: 1px solid var(--pst-color-table-outer-border);\n}\n.bd-content .nboutput .output_area.rendered_html table.dataframe th ~ th,\n.bd-content .nboutput .output_area.rendered_html table.dataframe th ~ td,\n.bd-content .nboutput .output_area.rendered_html table.dataframe td ~ th,\n.bd-content .nboutput .output_area.rendered_html table.dataframe td ~ td,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th ~ th,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe th ~ td,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td ~ th,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe td ~ td {\n border-left: 1px solid var(--pst-color-table-inner-border);\n}\n.bd-content .nboutput .output_area.rendered_html table.dataframe thead tr,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe thead tr {\n background-color: var(--pst-color-table-heading-bg);\n border-bottom: 2px solid var(--pst-color-primary);\n}\n.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(odd),\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(odd) {\n background-color: var(--pst-color-table-row-zebra-low-bg);\n}\n.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:nth-child(even),\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:nth-child(even) {\n background-color: var(--pst-color-table-row-zebra-high-bg);\n}\n.bd-content .nboutput .output_area.rendered_html table.dataframe tbody tr:hover,\n.bd-content .nboutput .output_area .jp-RenderedHTMLCommon table.dataframe tbody tr:hover {\n background-color: var(--pst-color-table-row-hover-bg);\n}\nhtml[data-theme=dark] .bd-content .nboutput .output_area.rendered_html:not(:has(table.dataframe)),\nhtml[data-theme=dark] .bd-content .nboutput .output_area .widget-subarea {\n color: var(--pst-color-on-background);\n background-color: var(--pst-color-text-base);\n border-radius: 0.25rem;\n padding: 0.5rem;\n}\nhtml[data-theme=dark] .bd-content .nboutput .output_area.stderr {\n background-color: var(--pst-color-danger);\n}\n\ndiv.nblast.container {\n margin-bottom: 1rem;\n}\n\nhtml[data-theme=light] .nbinput.container .prompt pre {\n color: #005b82;\n}\nhtml[data-theme=dark] .nbinput.container .prompt pre {\n color: #00e0e0;\n}\n\nhtml[data-theme=light] .nboutput.container .prompt pre {\n color: #a12236;\n}\nhtml[data-theme=dark] .nboutput.container .prompt pre {\n color: #ffa07a;\n}\n\n/*******************************************************************************\n * myst NB\n */\ndiv.cell_output .output {\n max-width: 100%;\n overflow-x: auto;\n}\n\n.bd-content div.cell_output table.dataframe {\n color: var(--pst-color-table);\n border: 1px solid var(--pst-color-table-outer-border);\n}\n.bd-content div.cell_output table.dataframe th ~ th,\n.bd-content div.cell_output table.dataframe th ~ td,\n.bd-content div.cell_output table.dataframe td ~ th,\n.bd-content div.cell_output table.dataframe td ~ td {\n border-left: 1px solid var(--pst-color-table-inner-border);\n}\n.bd-content div.cell_output table.dataframe thead tr {\n background-color: var(--pst-color-table-heading-bg);\n border-bottom: 2px solid var(--pst-color-primary);\n}\n.bd-content div.cell_output table.dataframe tbody tr:nth-child(odd) {\n background-color: var(--pst-color-table-row-zebra-low-bg);\n}\n.bd-content div.cell_output table.dataframe tbody tr:nth-child(even) {\n background-color: var(--pst-color-table-row-zebra-high-bg);\n}\n.bd-content div.cell_output table.dataframe tbody tr:hover {\n background-color: var(--pst-color-table-row-hover-bg);\n}\nhtml[data-theme=dark] .bd-content div.cell_output img,\nhtml[data-theme=dark] .bd-content div.cell_output .text_html:not(:has(table.dataframe)),\nhtml[data-theme=dark] .bd-content div.cell_output .widget-subarea {\n color: var(--pst-color-on-background);\n background-color: var(--pst-color-text-base);\n border-radius: 0.25rem;\n padding: 0.5rem;\n}\n\n.bd-content div.cell_input {\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n}\n.bd-content div.cell_input,\n.bd-content div.output {\n border-radius: 0.25rem;\n}\n.bd-content div.output table {\n table-layout: auto;\n}\n\n/**\n * style for the various mapping libs based on leaflet (folium, geemap, ipyleaflet)\n * mainly ensure the good display of the maps in both themes and avoid the customization\n * of the tiles\n */\n/**\n * avoid border override from pydata-sphinx-theme\n * minimal selctor to get the priority\n */\nhtml[data-theme=dark] .bd-content img.leaflet-tile.leaflet-tile-loaded {\n border-radius: 0;\n padding: 0;\n}\n\n/**\n * /search.html page special-cases\n */\n.bd-search-container {\n /*******************************************\n * Search results\n */\n}\n.bd-search-container div#search-results > h2, .bd-search-container div#search-results > .h2 {\n font-size: var(--pst-font-size-icon);\n margin-top: 1rem;\n}\n.bd-search-container div#search-results p.search-summary {\n color: var(--pst-color-text-muted);\n}\n.bd-search-container ul.search {\n margin: 0;\n list-style: none;\n}\n.bd-search-container ul.search li {\n background-image: none;\n padding: 1rem 0;\n margin: 1rem 0;\n border-top: 1px solid var(--pst-color-text-muted);\n}\n.bd-search-container ul.search li > a {\n font-size: 1.2em;\n}\n.bd-search-container ul.search li div.context,\n.bd-search-container ul.search li p.context {\n color: var(--pst-color-text-base);\n margin: 0.5em 0 0;\n}\n.bd-search-container ul.search li div.context a::before,\n.bd-search-container ul.search li p.context a::before {\n content: \"#\";\n padding-right: 0.2em;\n color: var(--pst-color-text-muted);\n}","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n\n --#{$prefix}body-color: #{$body-color};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n // scss-docs-end root-body-variables\n\n --#{$prefix}heading-color: #{$headings-color};\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-color: #{$mark-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-xxl: #{$border-radius-xxl};\n --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n // Focus styles\n // scss-docs-start root-focus-variables\n --#{$prefix}focus-ring-width: #{$focus-ring-width};\n --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};\n --#{$prefix}focus-ring-color: #{$focus-ring-color};\n // scss-docs-end root-focus-variables\n\n // scss-docs-start root-form-validation-variables\n --#{$prefix}form-valid-color: #{$form-valid-color};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color};\n --#{$prefix}form-invalid-color: #{$form-invalid-color};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};\n // scss-docs-end root-form-validation-variables\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n color-scheme: dark;\n\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n @each $color, $value in $theme-colors-text-dark {\n --#{$prefix}#{$color}-text-emphasis: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle-dark {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle-dark {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n --#{$prefix}highlight-color: #{$mark-color-dark};\n --#{$prefix}highlight-bg: #{$mark-bg-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n\n --#{$prefix}form-valid-color: #{$form-valid-color-dark};\n --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};\n --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};\n --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable scss/dimension-no-non-numeric-values\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query () {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query () {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + \" \" + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n } @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + \" \" + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: \"\";\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + \" 0\";\n } @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + \" \" + $value;\n } @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + \" \" + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + \" calc(\" + $min-width + if($value < 0, \" - \", \" + \") + $variable-width + \")\";\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluid-val: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluid-val {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule () {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule () {\n #{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`

  - - + + diff --git a/docs/build/html/allocator_8h.js b/docs/build/html/allocator_8h.js new file mode 100644 index 000000000..31d3f28a7 --- /dev/null +++ b/docs/build/html/allocator_8h.js @@ -0,0 +1,10 @@ +var allocator_8h = +[ + [ "mlx::core::allocator::Buffer", "classmlx_1_1core_1_1allocator_1_1_buffer.html", "classmlx_1_1core_1_1allocator_1_1_buffer" ], + [ "mlx::core::allocator::Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html", "classmlx_1_1core_1_1allocator_1_1_allocator" ], + [ "mlx::core::allocator::CommonAllocator", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html", "classmlx_1_1core_1_1allocator_1_1_common_allocator" ], + [ "mlx::core::allocator::allocator", "namespacemlx_1_1core_1_1allocator.html#aa23e2f20a336d0b159c097087194634e", null ], + [ "mlx::core::allocator::free", "namespacemlx_1_1core_1_1allocator.html#a77f0a1215be242db6485612bcb273af5", null ], + [ "mlx::core::allocator::malloc", "namespacemlx_1_1core_1_1allocator.html#a560d10a166e3c294f3757166f9bd6801", null ], + [ "mlx::core::allocator::malloc_or_wait", "namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc", null ] +]; \ No newline at end of file diff --git a/docs/build/html/allocator_8h_source.html b/docs/build/html/allocator_8h_source.html index a3f5fdacc..e68eb4137 100644 --- a/docs/build/html/allocator_8h_source.html +++ b/docs/build/html/allocator_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/allocator.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+ - + - - + +
+ +
+
+
- - +
- -
-
allocator.h
@@ -104,7 +118,7 @@ $(function(){ initResizable(false); });
10// WARNING: Only Buffer objects constructed from and those that wrap
11// raw pointers from mlx::allocator are supported.
-
12class Buffer {
+
12class Buffer {
13 private:
14 void* ptr_;
15
@@ -137,17 +151,17 @@ $(function(){ initResizable(false); });
38
-
39class Allocator {
+
39class Allocator {
41 public:
42 virtual Buffer malloc(size_t size, bool allow_swap = false) = 0;
43 virtual void free(Buffer buffer) = 0;
44 virtual size_t size(Buffer buffer) const = 0;
45
46 Allocator() = default;
-
47 Allocator(const Allocator& other) = delete;
-
48 Allocator(Allocator&& other) = delete;
-
49 Allocator& operator=(const Allocator& other) = delete;
-
50 Allocator& operator=(Allocator&& other) = delete;
+
47 Allocator(const Allocator& other) = delete;
+
48 Allocator(Allocator&& other) = delete;
+
49 Allocator& operator=(const Allocator& other) = delete;
+
50 Allocator& operator=(Allocator&& other) = delete;
51 virtual ~Allocator() = default;
52};
@@ -155,15 +169,15 @@ $(function(){ initResizable(false); });
55
-
56class CommonAllocator : public Allocator {
+
56class CommonAllocator : public Allocator {
58 public:
59 virtual Buffer malloc(size_t size, bool allow_swap = false) override;
60 virtual void free(Buffer buffer) override;
61 virtual size_t size(Buffer buffer) const override;
62
63 private:
-
64 CommonAllocator() = default;
- +
64 CommonAllocator() = default;
+
66};
67
@@ -184,7 +198,6 @@ $(function(){ initResizable(false); });
const void * ptr() const
Definition allocator.h:23
Buffer(void *ptr)
Definition allocator.h:17
void * ptr()
Definition allocator.h:26
-
Definition allocator.h:56
virtual Buffer malloc(size_t size, bool allow_swap=false) override
A general CPU allocator.
virtual void free(Buffer buffer) override
virtual size_t size(Buffer buffer) const override
@@ -195,10 +208,13 @@ $(function(){ initResizable(false); });
Buffer malloc_or_wait(size_t size)
Allocator & allocator()
- - + + diff --git a/docs/build/html/annotated.html b/docs/build/html/annotated.html index a2c8740a8..c21e35da4 100644 --- a/docs/build/html/annotated.html +++ b/docs/build/html/annotated.html @@ -3,7 +3,7 @@ - + MLX: Class List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+ - + - - - - -
+
+ +
+
+
+
- -
+ + diff --git a/docs/build/html/annotated_dup.js b/docs/build/html/annotated_dup.js new file mode 100644 index 000000000..5f4f3957b --- /dev/null +++ b/docs/build/html/annotated_dup.js @@ -0,0 +1,460 @@ +var annotated_dup = +[ + [ "metal", "namespacemetal.html", [ + [ "_numeric_limits_impl< bfloat16_t >", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4" ], + [ "is_empty", "structmetal_1_1is__empty.html", null ], + [ "is_static", "structmetal_1_1is__static.html", null ], + [ "make_void", "structmetal_1_1make__void.html", "structmetal_1_1make__void" ], + [ "pointer_element", "structmetal_1_1pointer__element.html", null ], + [ "pointer_element< constant T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ], + [ "pointer_element< device T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ], + [ "pointer_element< thread T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ], + [ "pointer_element< threadgroup T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ] + ] ], + [ "mlx", "namespacemlx.html", [ + [ "core", "namespacemlx_1_1core.html", [ + [ "allocator", "namespacemlx_1_1core_1_1allocator.html", [ + [ "Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html", "classmlx_1_1core_1_1allocator_1_1_allocator" ], + [ "Buffer", "classmlx_1_1core_1_1allocator_1_1_buffer.html", "classmlx_1_1core_1_1allocator_1_1_buffer" ], + [ "CommonAllocator", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html", "classmlx_1_1core_1_1allocator_1_1_common_allocator" ] + ] ], + [ "detail", "namespacemlx_1_1core_1_1detail.html", [ + [ "Abs", "structmlx_1_1core_1_1detail_1_1_abs.html", "structmlx_1_1core_1_1detail_1_1_abs" ], + [ "Add", "structmlx_1_1core_1_1detail_1_1_add.html", "structmlx_1_1core_1_1detail_1_1_add" ], + [ "ArcCos", "structmlx_1_1core_1_1detail_1_1_arc_cos.html", "structmlx_1_1core_1_1detail_1_1_arc_cos" ], + [ "ArcCosh", "structmlx_1_1core_1_1detail_1_1_arc_cosh.html", "structmlx_1_1core_1_1detail_1_1_arc_cosh" ], + [ "ArcSin", "structmlx_1_1core_1_1detail_1_1_arc_sin.html", "structmlx_1_1core_1_1detail_1_1_arc_sin" ], + [ "ArcSinh", "structmlx_1_1core_1_1detail_1_1_arc_sinh.html", "structmlx_1_1core_1_1detail_1_1_arc_sinh" ], + [ "ArcTan", "structmlx_1_1core_1_1detail_1_1_arc_tan.html", "structmlx_1_1core_1_1detail_1_1_arc_tan" ], + [ "ArcTan2", "structmlx_1_1core_1_1detail_1_1_arc_tan2.html", "structmlx_1_1core_1_1detail_1_1_arc_tan2" ], + [ "ArcTanh", "structmlx_1_1core_1_1detail_1_1_arc_tanh.html", "structmlx_1_1core_1_1detail_1_1_arc_tanh" ], + [ "BitwiseAnd", "structmlx_1_1core_1_1detail_1_1_bitwise_and.html", "structmlx_1_1core_1_1detail_1_1_bitwise_and" ], + [ "BitwiseOr", "structmlx_1_1core_1_1detail_1_1_bitwise_or.html", "structmlx_1_1core_1_1detail_1_1_bitwise_or" ], + [ "BitwiseXor", "structmlx_1_1core_1_1detail_1_1_bitwise_xor.html", "structmlx_1_1core_1_1detail_1_1_bitwise_xor" ], + [ "Ceil", "structmlx_1_1core_1_1detail_1_1_ceil.html", "structmlx_1_1core_1_1detail_1_1_ceil" ], + [ "Conjugate", "structmlx_1_1core_1_1detail_1_1_conjugate.html", "structmlx_1_1core_1_1detail_1_1_conjugate" ], + [ "Cos", "structmlx_1_1core_1_1detail_1_1_cos.html", "structmlx_1_1core_1_1detail_1_1_cos" ], + [ "Cosh", "structmlx_1_1core_1_1detail_1_1_cosh.html", "structmlx_1_1core_1_1detail_1_1_cosh" ], + [ "Divide", "structmlx_1_1core_1_1detail_1_1_divide.html", "structmlx_1_1core_1_1detail_1_1_divide" ], + [ "Equal", "structmlx_1_1core_1_1detail_1_1_equal.html", "structmlx_1_1core_1_1detail_1_1_equal" ], + [ "Erf", "structmlx_1_1core_1_1detail_1_1_erf.html", "structmlx_1_1core_1_1detail_1_1_erf" ], + [ "ErfInv", "structmlx_1_1core_1_1detail_1_1_erf_inv.html", "structmlx_1_1core_1_1detail_1_1_erf_inv" ], + [ "Exp", "structmlx_1_1core_1_1detail_1_1_exp.html", "structmlx_1_1core_1_1detail_1_1_exp" ], + [ "Expm1", "structmlx_1_1core_1_1detail_1_1_expm1.html", "structmlx_1_1core_1_1detail_1_1_expm1" ], + [ "Floor", "structmlx_1_1core_1_1detail_1_1_floor.html", "structmlx_1_1core_1_1detail_1_1_floor" ], + [ "Greater", "structmlx_1_1core_1_1detail_1_1_greater.html", "structmlx_1_1core_1_1detail_1_1_greater" ], + [ "GreaterEqual", "structmlx_1_1core_1_1detail_1_1_greater_equal.html", "structmlx_1_1core_1_1detail_1_1_greater_equal" ], + [ "Imag", "structmlx_1_1core_1_1detail_1_1_imag.html", "structmlx_1_1core_1_1detail_1_1_imag" ], + [ "IntOrFloat", "unionmlx_1_1core_1_1detail_1_1_int_or_float.html", "unionmlx_1_1core_1_1detail_1_1_int_or_float" ], + [ "InTracing", "structmlx_1_1core_1_1detail_1_1_in_tracing.html", "structmlx_1_1core_1_1detail_1_1_in_tracing" ], + [ "LeftShift", "structmlx_1_1core_1_1detail_1_1_left_shift.html", "structmlx_1_1core_1_1detail_1_1_left_shift" ], + [ "Less", "structmlx_1_1core_1_1detail_1_1_less.html", "structmlx_1_1core_1_1detail_1_1_less" ], + [ "LessEqual", "structmlx_1_1core_1_1detail_1_1_less_equal.html", "structmlx_1_1core_1_1detail_1_1_less_equal" ], + [ "Log", "structmlx_1_1core_1_1detail_1_1_log.html", "structmlx_1_1core_1_1detail_1_1_log" ], + [ "Log10", "structmlx_1_1core_1_1detail_1_1_log10.html", "structmlx_1_1core_1_1detail_1_1_log10" ], + [ "Log1p", "structmlx_1_1core_1_1detail_1_1_log1p.html", "structmlx_1_1core_1_1detail_1_1_log1p" ], + [ "Log2", "structmlx_1_1core_1_1detail_1_1_log2.html", "structmlx_1_1core_1_1detail_1_1_log2" ], + [ "LogAddExp", "structmlx_1_1core_1_1detail_1_1_log_add_exp.html", "structmlx_1_1core_1_1detail_1_1_log_add_exp" ], + [ "LogicalAnd", "structmlx_1_1core_1_1detail_1_1_logical_and.html", "structmlx_1_1core_1_1detail_1_1_logical_and" ], + [ "LogicalNot", "structmlx_1_1core_1_1detail_1_1_logical_not.html", "structmlx_1_1core_1_1detail_1_1_logical_not" ], + [ "LogicalOr", "structmlx_1_1core_1_1detail_1_1_logical_or.html", "structmlx_1_1core_1_1detail_1_1_logical_or" ], + [ "Maximum", "structmlx_1_1core_1_1detail_1_1_maximum.html", "structmlx_1_1core_1_1detail_1_1_maximum" ], + [ "Minimum", "structmlx_1_1core_1_1detail_1_1_minimum.html", "structmlx_1_1core_1_1detail_1_1_minimum" ], + [ "Multiply", "structmlx_1_1core_1_1detail_1_1_multiply.html", "structmlx_1_1core_1_1detail_1_1_multiply" ], + [ "NaNEqual", "structmlx_1_1core_1_1detail_1_1_na_n_equal.html", "structmlx_1_1core_1_1detail_1_1_na_n_equal" ], + [ "Negative", "structmlx_1_1core_1_1detail_1_1_negative.html", "structmlx_1_1core_1_1detail_1_1_negative" ], + [ "NotEqual", "structmlx_1_1core_1_1detail_1_1_not_equal.html", "structmlx_1_1core_1_1detail_1_1_not_equal" ], + [ "Power", "structmlx_1_1core_1_1detail_1_1_power.html", "structmlx_1_1core_1_1detail_1_1_power" ], + [ "Real", "structmlx_1_1core_1_1detail_1_1_real.html", "structmlx_1_1core_1_1detail_1_1_real" ], + [ "Remainder", "structmlx_1_1core_1_1detail_1_1_remainder.html", "structmlx_1_1core_1_1detail_1_1_remainder" ], + [ "RetainGraph", "structmlx_1_1core_1_1detail_1_1_retain_graph.html", "structmlx_1_1core_1_1detail_1_1_retain_graph" ], + [ "RightShift", "structmlx_1_1core_1_1detail_1_1_right_shift.html", "structmlx_1_1core_1_1detail_1_1_right_shift" ], + [ "Round", "structmlx_1_1core_1_1detail_1_1_round.html", "structmlx_1_1core_1_1detail_1_1_round" ], + [ "Rsqrt", "structmlx_1_1core_1_1detail_1_1_rsqrt.html", "structmlx_1_1core_1_1detail_1_1_rsqrt" ], + [ "Select", "structmlx_1_1core_1_1detail_1_1_select.html", "structmlx_1_1core_1_1detail_1_1_select" ], + [ "Sigmoid", "structmlx_1_1core_1_1detail_1_1_sigmoid.html", "structmlx_1_1core_1_1detail_1_1_sigmoid" ], + [ "Sign", "structmlx_1_1core_1_1detail_1_1_sign.html", "structmlx_1_1core_1_1detail_1_1_sign" ], + [ "Sin", "structmlx_1_1core_1_1detail_1_1_sin.html", "structmlx_1_1core_1_1detail_1_1_sin" ], + [ "Sinh", "structmlx_1_1core_1_1detail_1_1_sinh.html", "structmlx_1_1core_1_1detail_1_1_sinh" ], + [ "Sqrt", "structmlx_1_1core_1_1detail_1_1_sqrt.html", "structmlx_1_1core_1_1detail_1_1_sqrt" ], + [ "Square", "structmlx_1_1core_1_1detail_1_1_square.html", "structmlx_1_1core_1_1detail_1_1_square" ], + [ "Subtract", "structmlx_1_1core_1_1detail_1_1_subtract.html", "structmlx_1_1core_1_1detail_1_1_subtract" ], + [ "Tan", "structmlx_1_1core_1_1detail_1_1_tan.html", "structmlx_1_1core_1_1detail_1_1_tan" ], + [ "Tanh", "structmlx_1_1core_1_1detail_1_1_tanh.html", "structmlx_1_1core_1_1detail_1_1_tanh" ] + ] ], + [ "distributed", "namespacemlx_1_1core_1_1distributed.html", [ + [ "detail", "namespacemlx_1_1core_1_1distributed_1_1detail.html", [ + [ "GroupImpl", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl" ] + ] ], + [ "AllGather", "classmlx_1_1core_1_1distributed_1_1_all_gather.html", "classmlx_1_1core_1_1distributed_1_1_all_gather" ], + [ "AllReduce", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html", "classmlx_1_1core_1_1distributed_1_1_all_reduce" ], + [ "DistPrimitive", "classmlx_1_1core_1_1distributed_1_1_dist_primitive.html", "classmlx_1_1core_1_1distributed_1_1_dist_primitive" ], + [ "Group", "structmlx_1_1core_1_1distributed_1_1_group.html", "structmlx_1_1core_1_1distributed_1_1_group" ], + [ "Recv", "classmlx_1_1core_1_1distributed_1_1_recv.html", "classmlx_1_1core_1_1distributed_1_1_recv" ], + [ "Send", "classmlx_1_1core_1_1distributed_1_1_send.html", "classmlx_1_1core_1_1distributed_1_1_send" ] + ] ], + [ "fast", "namespacemlx_1_1core_1_1fast.html", [ + [ "AffineQuantize", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html", "classmlx_1_1core_1_1fast_1_1_affine_quantize" ], + [ "Custom", "classmlx_1_1core_1_1fast_1_1_custom.html", "classmlx_1_1core_1_1fast_1_1_custom" ], + [ "CustomKernel", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html", "classmlx_1_1core_1_1fast_1_1_custom_kernel" ], + [ "CustomKernelShapeInfo", "structmlx_1_1core_1_1fast_1_1_custom_kernel_shape_info.html", "structmlx_1_1core_1_1fast_1_1_custom_kernel_shape_info" ], + [ "LayerNorm", "classmlx_1_1core_1_1fast_1_1_layer_norm.html", "classmlx_1_1core_1_1fast_1_1_layer_norm" ], + [ "LayerNormVJP", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p" ], + [ "RMSNorm", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm" ], + [ "RMSNormVJP", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p" ], + [ "RoPE", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html", "classmlx_1_1core_1_1fast_1_1_ro_p_e" ], + [ "ScaledDotProductAttention", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention" ] + ] ], + [ "io", "namespacemlx_1_1core_1_1io.html", [ + [ "FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html", "classmlx_1_1core_1_1io_1_1_file_writer" ], + [ "ParallelFileReader", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html", "classmlx_1_1core_1_1io_1_1_parallel_file_reader" ], + [ "Reader", "classmlx_1_1core_1_1io_1_1_reader.html", "classmlx_1_1core_1_1io_1_1_reader" ], + [ "Writer", "classmlx_1_1core_1_1io_1_1_writer.html", "classmlx_1_1core_1_1io_1_1_writer" ] + ] ], + [ "metal", "namespacemlx_1_1core_1_1metal.html", [ + [ "Buffer", "classmlx_1_1core_1_1metal_1_1_buffer.html", "classmlx_1_1core_1_1metal_1_1_buffer" ], + [ "CommandEncoder", "structmlx_1_1core_1_1metal_1_1_command_encoder.html", "structmlx_1_1core_1_1metal_1_1_command_encoder" ], + [ "Device", "classmlx_1_1core_1_1metal_1_1_device.html", "classmlx_1_1core_1_1metal_1_1_device" ], + [ "DeviceStream", "structmlx_1_1core_1_1metal_1_1_device_stream.html", "structmlx_1_1core_1_1metal_1_1_device_stream" ], + [ "Fence", "structmlx_1_1core_1_1metal_1_1_fence.html", "structmlx_1_1core_1_1metal_1_1_fence" ], + [ "MetalAllocator", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html", "classmlx_1_1core_1_1metal_1_1_metal_allocator" ], + [ "ResidencySet", "classmlx_1_1core_1_1metal_1_1_residency_set.html", "classmlx_1_1core_1_1metal_1_1_residency_set" ] + ] ], + [ "random", "namespacemlx_1_1core_1_1random.html", [ + [ "KeySequence", "classmlx_1_1core_1_1random_1_1_key_sequence.html", "classmlx_1_1core_1_1random_1_1_key_sequence" ] + ] ], + [ "scheduler", "namespacemlx_1_1core_1_1scheduler.html", [ + [ "Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html", "classmlx_1_1core_1_1scheduler_1_1_scheduler" ], + [ "StreamThread", "structmlx_1_1core_1_1scheduler_1_1_stream_thread.html", "structmlx_1_1core_1_1scheduler_1_1_stream_thread" ] + ] ], + [ "_MLX_BFloat16", "structmlx_1_1core_1_1___m_l_x___b_float16.html", "structmlx_1_1core_1_1___m_l_x___b_float16" ], + [ "_MLX_Float16", "structmlx_1_1core_1_1___m_l_x___float16.html", "structmlx_1_1core_1_1___m_l_x___float16" ], + [ "Abs", "classmlx_1_1core_1_1_abs.html", "classmlx_1_1core_1_1_abs" ], + [ "Add", "classmlx_1_1core_1_1_add.html", "classmlx_1_1core_1_1_add" ], + [ "AddMM", "classmlx_1_1core_1_1_add_m_m.html", "classmlx_1_1core_1_1_add_m_m" ], + [ "Arange", "classmlx_1_1core_1_1_arange.html", "classmlx_1_1core_1_1_arange" ], + [ "ArcCos", "classmlx_1_1core_1_1_arc_cos.html", "classmlx_1_1core_1_1_arc_cos" ], + [ "ArcCosh", "classmlx_1_1core_1_1_arc_cosh.html", "classmlx_1_1core_1_1_arc_cosh" ], + [ "ArcSin", "classmlx_1_1core_1_1_arc_sin.html", "classmlx_1_1core_1_1_arc_sin" ], + [ "ArcSinh", "classmlx_1_1core_1_1_arc_sinh.html", "classmlx_1_1core_1_1_arc_sinh" ], + [ "ArcTan", "classmlx_1_1core_1_1_arc_tan.html", "classmlx_1_1core_1_1_arc_tan" ], + [ "ArcTan2", "classmlx_1_1core_1_1_arc_tan2.html", "classmlx_1_1core_1_1_arc_tan2" ], + [ "ArcTanh", "classmlx_1_1core_1_1_arc_tanh.html", "classmlx_1_1core_1_1_arc_tanh" ], + [ "ArgPartition", "classmlx_1_1core_1_1_arg_partition.html", "classmlx_1_1core_1_1_arg_partition" ], + [ "ArgReduce", "classmlx_1_1core_1_1_arg_reduce.html", "classmlx_1_1core_1_1_arg_reduce" ], + [ "ArgSort", "classmlx_1_1core_1_1_arg_sort.html", "classmlx_1_1core_1_1_arg_sort" ], + [ "array", "classmlx_1_1core_1_1array.html", "classmlx_1_1core_1_1array" ], + [ "AsStrided", "classmlx_1_1core_1_1_as_strided.html", "classmlx_1_1core_1_1_as_strided" ], + [ "AsType", "classmlx_1_1core_1_1_as_type.html", "classmlx_1_1core_1_1_as_type" ], + [ "BitwiseBinary", "classmlx_1_1core_1_1_bitwise_binary.html", "classmlx_1_1core_1_1_bitwise_binary" ], + [ "BlockMaskedMM", "classmlx_1_1core_1_1_block_masked_m_m.html", "classmlx_1_1core_1_1_block_masked_m_m" ], + [ "Broadcast", "classmlx_1_1core_1_1_broadcast.html", "classmlx_1_1core_1_1_broadcast" ], + [ "BroadcastAxes", "classmlx_1_1core_1_1_broadcast_axes.html", "classmlx_1_1core_1_1_broadcast_axes" ], + [ "Ceil", "classmlx_1_1core_1_1_ceil.html", "classmlx_1_1core_1_1_ceil" ], + [ "Cholesky", "classmlx_1_1core_1_1_cholesky.html", "classmlx_1_1core_1_1_cholesky" ], + [ "CommandEncoder", "structmlx_1_1core_1_1_command_encoder.html", "structmlx_1_1core_1_1_command_encoder" ], + [ "Compiled", "classmlx_1_1core_1_1_compiled.html", "classmlx_1_1core_1_1_compiled" ], + [ "complex128_t", "structmlx_1_1core_1_1complex128__t.html", "structmlx_1_1core_1_1complex128__t" ], + [ "complex64_t", "structmlx_1_1core_1_1complex64__t.html", "structmlx_1_1core_1_1complex64__t" ], + [ "Concatenate", "classmlx_1_1core_1_1_concatenate.html", "classmlx_1_1core_1_1_concatenate" ], + [ "Conjugate", "classmlx_1_1core_1_1_conjugate.html", "classmlx_1_1core_1_1_conjugate" ], + [ "Contiguous", "classmlx_1_1core_1_1_contiguous.html", "classmlx_1_1core_1_1_contiguous" ], + [ "ContiguousIterator", "structmlx_1_1core_1_1_contiguous_iterator.html", "structmlx_1_1core_1_1_contiguous_iterator" ], + [ "Convolution", "classmlx_1_1core_1_1_convolution.html", "classmlx_1_1core_1_1_convolution" ], + [ "Copy", "classmlx_1_1core_1_1_copy.html", "classmlx_1_1core_1_1_copy" ], + [ "Cos", "classmlx_1_1core_1_1_cos.html", "classmlx_1_1core_1_1_cos" ], + [ "Cosh", "classmlx_1_1core_1_1_cosh.html", "classmlx_1_1core_1_1_cosh" ], + [ "CustomTransforms", "classmlx_1_1core_1_1_custom_transforms.html", "classmlx_1_1core_1_1_custom_transforms" ], + [ "DefaultContiguousReduce", "structmlx_1_1core_1_1_default_contiguous_reduce.html", "structmlx_1_1core_1_1_default_contiguous_reduce" ], + [ "DefaultStridedReduce", "structmlx_1_1core_1_1_default_strided_reduce.html", "structmlx_1_1core_1_1_default_strided_reduce" ], + [ "Depends", "classmlx_1_1core_1_1_depends.html", "classmlx_1_1core_1_1_depends" ], + [ "Device", "structmlx_1_1core_1_1_device.html", "structmlx_1_1core_1_1_device" ], + [ "Divide", "classmlx_1_1core_1_1_divide.html", "classmlx_1_1core_1_1_divide" ], + [ "DivMod", "classmlx_1_1core_1_1_div_mod.html", "classmlx_1_1core_1_1_div_mod" ], + [ "Dtype", "structmlx_1_1core_1_1_dtype.html", "structmlx_1_1core_1_1_dtype" ], + [ "DynamicSlice", "classmlx_1_1core_1_1_dynamic_slice.html", "classmlx_1_1core_1_1_dynamic_slice" ], + [ "DynamicSliceUpdate", "classmlx_1_1core_1_1_dynamic_slice_update.html", "classmlx_1_1core_1_1_dynamic_slice_update" ], + [ "Eigh", "classmlx_1_1core_1_1_eigh.html", "classmlx_1_1core_1_1_eigh" ], + [ "Equal", "classmlx_1_1core_1_1_equal.html", "classmlx_1_1core_1_1_equal" ], + [ "Erf", "classmlx_1_1core_1_1_erf.html", "classmlx_1_1core_1_1_erf" ], + [ "ErfInv", "classmlx_1_1core_1_1_erf_inv.html", "classmlx_1_1core_1_1_erf_inv" ], + [ "Event", "classmlx_1_1core_1_1_event.html", "classmlx_1_1core_1_1_event" ], + [ "Exp", "classmlx_1_1core_1_1_exp.html", "classmlx_1_1core_1_1_exp" ], + [ "ExpandDims", "classmlx_1_1core_1_1_expand_dims.html", "classmlx_1_1core_1_1_expand_dims" ], + [ "Expm1", "classmlx_1_1core_1_1_expm1.html", "classmlx_1_1core_1_1_expm1" ], + [ "FFT", "classmlx_1_1core_1_1_f_f_t.html", "classmlx_1_1core_1_1_f_f_t" ], + [ "finfo", "structmlx_1_1core_1_1finfo.html", "structmlx_1_1core_1_1finfo" ], + [ "Flatten", "classmlx_1_1core_1_1_flatten.html", "classmlx_1_1core_1_1_flatten" ], + [ "Floor", "classmlx_1_1core_1_1_floor.html", "classmlx_1_1core_1_1_floor" ], + [ "Full", "classmlx_1_1core_1_1_full.html", "classmlx_1_1core_1_1_full" ], + [ "FunctionExporter", "structmlx_1_1core_1_1_function_exporter.html", "structmlx_1_1core_1_1_function_exporter" ], + [ "Gather", "classmlx_1_1core_1_1_gather.html", "classmlx_1_1core_1_1_gather" ], + [ "GatherMM", "classmlx_1_1core_1_1_gather_m_m.html", "classmlx_1_1core_1_1_gather_m_m" ], + [ "GatherQMM", "classmlx_1_1core_1_1_gather_q_m_m.html", "classmlx_1_1core_1_1_gather_q_m_m" ], + [ "Greater", "classmlx_1_1core_1_1_greater.html", "classmlx_1_1core_1_1_greater" ], + [ "GreaterEqual", "classmlx_1_1core_1_1_greater_equal.html", "classmlx_1_1core_1_1_greater_equal" ], + [ "Hadamard", "classmlx_1_1core_1_1_hadamard.html", "classmlx_1_1core_1_1_hadamard" ], + [ "Imag", "classmlx_1_1core_1_1_imag.html", "classmlx_1_1core_1_1_imag" ], + [ "ImportedFunction", "structmlx_1_1core_1_1_imported_function.html", "structmlx_1_1core_1_1_imported_function" ], + [ "Inverse", "classmlx_1_1core_1_1_inverse.html", "classmlx_1_1core_1_1_inverse" ], + [ "JitCompiler", "classmlx_1_1core_1_1_jit_compiler.html", "classmlx_1_1core_1_1_jit_compiler" ], + [ "Less", "classmlx_1_1core_1_1_less.html", "classmlx_1_1core_1_1_less" ], + [ "LessEqual", "classmlx_1_1core_1_1_less_equal.html", "classmlx_1_1core_1_1_less_equal" ], + [ "Load", "classmlx_1_1core_1_1_load.html", "classmlx_1_1core_1_1_load" ], + [ "Log", "classmlx_1_1core_1_1_log.html", "classmlx_1_1core_1_1_log" ], + [ "Log1p", "classmlx_1_1core_1_1_log1p.html", "classmlx_1_1core_1_1_log1p" ], + [ "LogAddExp", "classmlx_1_1core_1_1_log_add_exp.html", "classmlx_1_1core_1_1_log_add_exp" ], + [ "LogicalAnd", "classmlx_1_1core_1_1_logical_and.html", "classmlx_1_1core_1_1_logical_and" ], + [ "LogicalNot", "classmlx_1_1core_1_1_logical_not.html", "classmlx_1_1core_1_1_logical_not" ], + [ "LogicalOr", "classmlx_1_1core_1_1_logical_or.html", "classmlx_1_1core_1_1_logical_or" ], + [ "Matmul", "classmlx_1_1core_1_1_matmul.html", "classmlx_1_1core_1_1_matmul" ], + [ "Maximum", "classmlx_1_1core_1_1_maximum.html", "classmlx_1_1core_1_1_maximum" ], + [ "Minimum", "classmlx_1_1core_1_1_minimum.html", "classmlx_1_1core_1_1_minimum" ], + [ "Multiply", "classmlx_1_1core_1_1_multiply.html", "classmlx_1_1core_1_1_multiply" ], + [ "Negative", "classmlx_1_1core_1_1_negative.html", "classmlx_1_1core_1_1_negative" ], + [ "NodeNamer", "structmlx_1_1core_1_1_node_namer.html", "structmlx_1_1core_1_1_node_namer" ], + [ "NotEqual", "classmlx_1_1core_1_1_not_equal.html", "classmlx_1_1core_1_1_not_equal" ], + [ "NumberOfElements", "classmlx_1_1core_1_1_number_of_elements.html", "classmlx_1_1core_1_1_number_of_elements" ], + [ "numeric_limits", "structmlx_1_1core_1_1numeric__limits.html", null ], + [ "numeric_limits< bfloat16_t >", "structmlx_1_1core_1_1numeric__limits.html", "structmlx_1_1core_1_1numeric__limits" ], + [ "numeric_limits< float >", "structmlx_1_1core_1_1numeric__limits.html", null ], + [ "numeric_limits< float16_t >", "structmlx_1_1core_1_1numeric__limits.html", "structmlx_1_1core_1_1numeric__limits" ], + [ "Pad", "classmlx_1_1core_1_1_pad.html", "classmlx_1_1core_1_1_pad" ], + [ "Partition", "classmlx_1_1core_1_1_partition.html", "classmlx_1_1core_1_1_partition" ], + [ "Power", "classmlx_1_1core_1_1_power.html", "classmlx_1_1core_1_1_power" ], + [ "Primitive", "classmlx_1_1core_1_1_primitive.html", "classmlx_1_1core_1_1_primitive" ], + [ "PrintFormatter", "structmlx_1_1core_1_1_print_formatter.html", "structmlx_1_1core_1_1_print_formatter" ], + [ "QRF", "classmlx_1_1core_1_1_q_r_f.html", "classmlx_1_1core_1_1_q_r_f" ], + [ "QuantizedMatmul", "classmlx_1_1core_1_1_quantized_matmul.html", "classmlx_1_1core_1_1_quantized_matmul" ], + [ "RandomBits", "classmlx_1_1core_1_1_random_bits.html", "classmlx_1_1core_1_1_random_bits" ], + [ "Real", "classmlx_1_1core_1_1_real.html", "classmlx_1_1core_1_1_real" ], + [ "Reduce", "classmlx_1_1core_1_1_reduce.html", "classmlx_1_1core_1_1_reduce" ], + [ "ReductionPlan", "structmlx_1_1core_1_1_reduction_plan.html", "structmlx_1_1core_1_1_reduction_plan" ], + [ "Remainder", "classmlx_1_1core_1_1_remainder.html", "classmlx_1_1core_1_1_remainder" ], + [ "Reshape", "classmlx_1_1core_1_1_reshape.html", "classmlx_1_1core_1_1_reshape" ], + [ "Round", "classmlx_1_1core_1_1_round.html", "classmlx_1_1core_1_1_round" ], + [ "Scan", "classmlx_1_1core_1_1_scan.html", "classmlx_1_1core_1_1_scan" ], + [ "Scatter", "classmlx_1_1core_1_1_scatter.html", "classmlx_1_1core_1_1_scatter" ], + [ "Select", "classmlx_1_1core_1_1_select.html", "classmlx_1_1core_1_1_select" ], + [ "Sigmoid", "classmlx_1_1core_1_1_sigmoid.html", "classmlx_1_1core_1_1_sigmoid" ], + [ "Sign", "classmlx_1_1core_1_1_sign.html", "classmlx_1_1core_1_1_sign" ], + [ "Sin", "classmlx_1_1core_1_1_sin.html", "classmlx_1_1core_1_1_sin" ], + [ "Sinh", "classmlx_1_1core_1_1_sinh.html", "classmlx_1_1core_1_1_sinh" ], + [ "Slice", "classmlx_1_1core_1_1_slice.html", "classmlx_1_1core_1_1_slice" ], + [ "SliceUpdate", "classmlx_1_1core_1_1_slice_update.html", "classmlx_1_1core_1_1_slice_update" ], + [ "Softmax", "classmlx_1_1core_1_1_softmax.html", "classmlx_1_1core_1_1_softmax" ], + [ "Sort", "classmlx_1_1core_1_1_sort.html", "classmlx_1_1core_1_1_sort" ], + [ "Split", "classmlx_1_1core_1_1_split.html", "classmlx_1_1core_1_1_split" ], + [ "Sqrt", "classmlx_1_1core_1_1_sqrt.html", "classmlx_1_1core_1_1_sqrt" ], + [ "Square", "classmlx_1_1core_1_1_square.html", "classmlx_1_1core_1_1_square" ], + [ "Squeeze", "classmlx_1_1core_1_1_squeeze.html", "classmlx_1_1core_1_1_squeeze" ], + [ "StopGradient", "classmlx_1_1core_1_1_stop_gradient.html", "classmlx_1_1core_1_1_stop_gradient" ], + [ "Stream", "structmlx_1_1core_1_1_stream.html", "structmlx_1_1core_1_1_stream" ], + [ "StreamContext", "structmlx_1_1core_1_1_stream_context.html", "structmlx_1_1core_1_1_stream_context" ], + [ "Subtract", "classmlx_1_1core_1_1_subtract.html", "classmlx_1_1core_1_1_subtract" ], + [ "SVD", "classmlx_1_1core_1_1_s_v_d.html", "classmlx_1_1core_1_1_s_v_d" ], + [ "Tan", "classmlx_1_1core_1_1_tan.html", "classmlx_1_1core_1_1_tan" ], + [ "Tanh", "classmlx_1_1core_1_1_tanh.html", "classmlx_1_1core_1_1_tanh" ], + [ "Transpose", "classmlx_1_1core_1_1_transpose.html", "classmlx_1_1core_1_1_transpose" ], + [ "TypeToDtype", "structmlx_1_1core_1_1_type_to_dtype.html", "structmlx_1_1core_1_1_type_to_dtype" ], + [ "UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html", "classmlx_1_1core_1_1_unary_primitive" ], + [ "Unflatten", "classmlx_1_1core_1_1_unflatten.html", "classmlx_1_1core_1_1_unflatten" ], + [ "View", "classmlx_1_1core_1_1_view.html", "classmlx_1_1core_1_1_view" ] + ] ], + [ "steel", "namespacemlx_1_1steel.html", [ + [ "AccumHelper", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ], + [ "AttnParams", "structmlx_1_1steel_1_1_attn_params.html", "structmlx_1_1steel_1_1_attn_params" ], + [ "BaseMMAFrag", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", null ], + [ "BaseMMAFrag< T, 8, 8 >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", "structmlx_1_1steel_1_1_base_m_m_a_frag" ], + [ "BlockLoader", "structmlx_1_1steel_1_1_block_loader.html", "structmlx_1_1steel_1_1_block_loader" ], + [ "BlockLoaderT", "structmlx_1_1steel_1_1_block_loader_t.html", "structmlx_1_1steel_1_1_block_loader_t" ], + [ "BlockMMA", "structmlx_1_1steel_1_1_block_m_m_a.html", "structmlx_1_1steel_1_1_block_m_m_a" ], + [ "BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ], + [ "ChannelHelper", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ], + [ "ChannelHelper< 1 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ], + [ "ChannelHelper< 2 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ], + [ "ChannelHelper< 3 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ], + [ "ChannelHelper< 4 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ], + [ "Conv2DGeneralBaseInfo", "structmlx_1_1steel_1_1_conv2_d_general_base_info.html", "structmlx_1_1steel_1_1_conv2_d_general_base_info" ], + [ "Conv2DGeneralJumpParams", "structmlx_1_1steel_1_1_conv2_d_general_jump_params.html", "structmlx_1_1steel_1_1_conv2_d_general_jump_params" ], + [ "Conv2DInputBlockLoaderGeneral", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_general.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_general" ], + [ "Conv2DInputBlockLoaderLargeFilter", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_large_filter.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_large_filter" ], + [ "Conv2DInputBlockLoaderSmallChannels", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_channels.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_channels" ], + [ "Conv2DInputBlockLoaderSmallFilter", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_filter.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_filter" ], + [ "Conv2DWeightBlockLoader", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader" ], + [ "Conv2DWeightBlockLoaderGeneral", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_general.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_general" ], + [ "Conv2DWeightBlockLoaderSmallChannels", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_small_channels.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_small_channels" ], + [ "CShape", "structmlx_1_1steel_1_1_c_shape.html", "structmlx_1_1steel_1_1_c_shape" ], + [ "GEMMAddMMParams", "structmlx_1_1steel_1_1_g_e_m_m_add_m_m_params.html", "structmlx_1_1steel_1_1_g_e_m_m_add_m_m_params" ], + [ "GEMMKernel", "structmlx_1_1steel_1_1_g_e_m_m_kernel.html", "structmlx_1_1steel_1_1_g_e_m_m_kernel" ], + [ "GEMMParams", "structmlx_1_1steel_1_1_g_e_m_m_params.html", "structmlx_1_1steel_1_1_g_e_m_m_params" ], + [ "GEMMSpiltKParams", "structmlx_1_1steel_1_1_g_e_m_m_spilt_k_params.html", "structmlx_1_1steel_1_1_g_e_m_m_spilt_k_params" ], + [ "ImplicitGemmConv2DParams", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params.html", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params" ], + [ "integral_constant", "structmlx_1_1steel_1_1integral__constant.html", "structmlx_1_1steel_1_1integral__constant" ], + [ "is_integral", "structmlx_1_1steel_1_1is__integral.html", null ], + [ "is_integral< integral_constant< T, v > >", "structmlx_1_1steel_1_1is__integral.html", null ], + [ "Layout2D", "structmlx_1_1steel_1_1_layout2_d.html", "structmlx_1_1steel_1_1_layout2_d" ], + [ "LoopAlignment", "structmlx_1_1steel_1_1_loop_alignment.html", null ], + [ "MMATile", "structmlx_1_1steel_1_1_m_m_a_tile.html", "structmlx_1_1steel_1_1_m_m_a_tile" ], + [ "Shape2D", "structmlx_1_1steel_1_1_shape2_d.html", "structmlx_1_1steel_1_1_shape2_d" ], + [ "TransformAdd", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ], + [ "TransformAxpby", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ], + [ "TransformNone", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ] + ] ] + ] ], + [ "pocketfft", "namespacepocketfft.html", [ + [ "detail", "namespacepocketfft_1_1detail.html", [ + [ "threading", "namespacepocketfft_1_1detail_1_1threading.html", [ + [ "aligned_allocator", "structpocketfft_1_1detail_1_1threading_1_1aligned__allocator.html", "structpocketfft_1_1detail_1_1threading_1_1aligned__allocator" ], + [ "concurrent_queue", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue" ], + [ "latch", "classpocketfft_1_1detail_1_1threading_1_1latch.html", "classpocketfft_1_1detail_1_1threading_1_1latch" ], + [ "thread_pool", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html", "classpocketfft_1_1detail_1_1threading_1_1thread__pool" ] + ] ], + [ "add_vec", "structpocketfft_1_1detail_1_1add__vec.html", "structpocketfft_1_1detail_1_1add__vec" ], + [ "add_vec< cmplx< T > >", "structpocketfft_1_1detail_1_1add__vec.html", "structpocketfft_1_1detail_1_1add__vec" ], + [ "arr", "classpocketfft_1_1detail_1_1arr.html", "classpocketfft_1_1detail_1_1arr" ], + [ "arr_info", "classpocketfft_1_1detail_1_1arr__info.html", "classpocketfft_1_1detail_1_1arr__info" ], + [ "cfftp", "classpocketfft_1_1detail_1_1cfftp.html", "classpocketfft_1_1detail_1_1cfftp" ], + [ "cmplx", "structpocketfft_1_1detail_1_1cmplx.html", "structpocketfft_1_1detail_1_1cmplx" ], + [ "cndarr", "classpocketfft_1_1detail_1_1cndarr.html", "classpocketfft_1_1detail_1_1cndarr" ], + [ "ExecC2C", "structpocketfft_1_1detail_1_1_exec_c2_c.html", "structpocketfft_1_1detail_1_1_exec_c2_c" ], + [ "ExecDcst", "structpocketfft_1_1detail_1_1_exec_dcst.html", "structpocketfft_1_1detail_1_1_exec_dcst" ], + [ "ExecHartley", "structpocketfft_1_1detail_1_1_exec_hartley.html", "structpocketfft_1_1detail_1_1_exec_hartley" ], + [ "ExecR2R", "structpocketfft_1_1detail_1_1_exec_r2_r.html", "structpocketfft_1_1detail_1_1_exec_r2_r" ], + [ "fftblue", "classpocketfft_1_1detail_1_1fftblue.html", "classpocketfft_1_1detail_1_1fftblue" ], + [ "multi_iter", "classpocketfft_1_1detail_1_1multi__iter.html", "classpocketfft_1_1detail_1_1multi__iter" ], + [ "ndarr", "classpocketfft_1_1detail_1_1ndarr.html", "classpocketfft_1_1detail_1_1ndarr" ], + [ "pocketfft_c", "classpocketfft_1_1detail_1_1pocketfft__c.html", "classpocketfft_1_1detail_1_1pocketfft__c" ], + [ "pocketfft_r", "classpocketfft_1_1detail_1_1pocketfft__r.html", "classpocketfft_1_1detail_1_1pocketfft__r" ], + [ "rev_iter", "classpocketfft_1_1detail_1_1rev__iter.html", "classpocketfft_1_1detail_1_1rev__iter" ], + [ "rfftp", "classpocketfft_1_1detail_1_1rfftp.html", "classpocketfft_1_1detail_1_1rfftp" ], + [ "simple_iter", "classpocketfft_1_1detail_1_1simple__iter.html", "classpocketfft_1_1detail_1_1simple__iter" ], + [ "sincos_2pibyn", "classpocketfft_1_1detail_1_1sincos__2pibyn.html", "classpocketfft_1_1detail_1_1sincos__2pibyn" ], + [ "T_dcst23", "classpocketfft_1_1detail_1_1_t__dcst23.html", "classpocketfft_1_1detail_1_1_t__dcst23" ], + [ "T_dcst4", "classpocketfft_1_1detail_1_1_t__dcst4.html", "classpocketfft_1_1detail_1_1_t__dcst4" ], + [ "T_dct1", "classpocketfft_1_1detail_1_1_t__dct1.html", "classpocketfft_1_1detail_1_1_t__dct1" ], + [ "T_dst1", "classpocketfft_1_1detail_1_1_t__dst1.html", "classpocketfft_1_1detail_1_1_t__dst1" ], + [ "util", "structpocketfft_1_1detail_1_1util.html", "structpocketfft_1_1detail_1_1util" ], + [ "VLEN", "structpocketfft_1_1detail_1_1_v_l_e_n.html", "structpocketfft_1_1detail_1_1_v_l_e_n" ], + [ "VTYPE", "structpocketfft_1_1detail_1_1_v_t_y_p_e.html", null ] + ] ] + ] ], + [ "_MLX_BFloat16", "struct___m_l_x___b_float16.html", "struct___m_l_x___b_float16" ], + [ "_NoMask", "struct___no_mask.html", "struct___no_mask" ], + [ "Abs", "struct_abs.html", "struct_abs" ], + [ "Add", "struct_add.html", "struct_add" ], + [ "And", "struct_and.html", null ], + [ "ArcCos", "struct_arc_cos.html", "struct_arc_cos" ], + [ "ArcCosh", "struct_arc_cosh.html", "struct_arc_cosh" ], + [ "ArcSin", "struct_arc_sin.html", "struct_arc_sin" ], + [ "ArcSinh", "struct_arc_sinh.html", "struct_arc_sinh" ], + [ "ArcTan", "struct_arc_tan.html", "struct_arc_tan" ], + [ "ArcTan2", "struct_arc_tan2.html", "struct_arc_tan2" ], + [ "ArcTanh", "struct_arc_tanh.html", "struct_arc_tanh" ], + [ "BitwiseAnd", "struct_bitwise_and.html", "struct_bitwise_and" ], + [ "BitwiseOr", "struct_bitwise_or.html", "struct_bitwise_or" ], + [ "BitwiseXor", "struct_bitwise_xor.html", "struct_bitwise_xor" ], + [ "BlockMergeSort", "struct_block_merge_sort.html", "struct_block_merge_sort" ], + [ "bool4_or_uint", "unionbool4__or__uint.html", "unionbool4__or__uint" ], + [ "Ceil", "struct_ceil.html", "struct_ceil" ], + [ "complex64_t", "structcomplex64__t.html", "structcomplex64__t" ], + [ "ConditionalType", "struct_conditional_type.html", "struct_conditional_type" ], + [ "ConditionalType< true, T, U >", "struct_conditional_type.html", "struct_conditional_type" ], + [ "Conjugate", "struct_conjugate.html", "struct_conjugate" ], + [ "Cos", "struct_cos.html", "struct_cos" ], + [ "Cosh", "struct_cosh.html", "struct_cosh" ], + [ "CumMax", "struct_cum_max.html", "struct_cum_max" ], + [ "CumMin", "struct_cum_min.html", "struct_cum_min" ], + [ "CumProd", "struct_cum_prod.html", null ], + [ "CumProd< bool >", "struct_cum_prod.html", "struct_cum_prod" ], + [ "CumSum", "struct_cum_sum.html", null ], + [ "Divide", "struct_divide.html", "struct_divide" ], + [ "DivMod", "struct_div_mod.html", "struct_div_mod" ], + [ "DivOp", "struct_div_op.html", "struct_div_op" ], + [ "Equal", "struct_equal.html", "struct_equal" ], + [ "Erf", "struct_erf.html", "struct_erf" ], + [ "ErfInv", "struct_erf_inv.html", "struct_erf_inv" ], + [ "Exp", "struct_exp.html", "struct_exp" ], + [ "Expm1", "struct_expm1.html", "struct_expm1" ], + [ "ExpSubOp", "struct_exp_sub_op.html", "struct_exp_sub_op" ], + [ "Floor", "struct_floor.html", "struct_floor" ], + [ "FloorDivide", "struct_floor_divide.html", "struct_floor_divide" ], + [ "GEMVKernel", "struct_g_e_m_v_kernel.html", "struct_g_e_m_v_kernel" ], + [ "GEMVTKernel", "struct_g_e_m_v_t_kernel.html", "struct_g_e_m_v_t_kernel" ], + [ "Greater", "struct_greater.html", "struct_greater" ], + [ "GreaterEqual", "struct_greater_equal.html", "struct_greater_equal" ], + [ "Imag", "struct_imag.html", "struct_imag" ], + [ "Indices", "struct_indices.html", "struct_indices" ], + [ "KernelMergeSort", "struct_kernel_merge_sort.html", "struct_kernel_merge_sort" ], + [ "KernelMultiBlockMergeSort", "struct_kernel_multi_block_merge_sort.html", "struct_kernel_multi_block_merge_sort" ], + [ "LeftShift", "struct_left_shift.html", "struct_left_shift" ], + [ "Less", "struct_less.html", "struct_less" ], + [ "LessEqual", "struct_less_equal.html", "struct_less_equal" ], + [ "LessThan", "struct_less_than.html", "struct_less_than" ], + [ "Limits", "struct_limits.html", "struct_limits" ], + [ "Limits< bfloat16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< bool >", "struct_limits.html", "struct_limits" ], + [ "Limits< complex64_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< float >", "struct_limits.html", "struct_limits" ], + [ "Limits< half >", "struct_limits.html", "struct_limits" ], + [ "Limits< int16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int32_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int64_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int8_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint32_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint64_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint8_t >", "struct_limits.html", "struct_limits" ], + [ "Log", "struct_log.html", "struct_log" ], + [ "Log10", "struct_log10.html", "struct_log10" ], + [ "Log1p", "struct_log1p.html", "struct_log1p" ], + [ "Log2", "struct_log2.html", "struct_log2" ], + [ "LogAddExp", "struct_log_add_exp.html", "struct_log_add_exp" ], + [ "LogicalAnd", "struct_logical_and.html", "struct_logical_and" ], + [ "LogicalNot", "struct_logical_not.html", "struct_logical_not" ], + [ "LogicalOr", "struct_logical_or.html", "struct_logical_or" ], + [ "LoopedElemToLoc", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "LoopedElemToLoc< 1, OffsetT, false >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "LoopedElemToLoc< 1, OffsetT, true >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "Max", "struct_max.html", "struct_max" ], + [ "Maximum", "struct_maximum.html", "struct_maximum" ], + [ "MaxOp", "struct_max_op.html", "struct_max_op" ], + [ "Min", "struct_min.html", null ], + [ "Minimum", "struct_minimum.html", "struct_minimum" ], + [ "mlx_atomic", "structmlx__atomic.html", "structmlx__atomic" ], + [ "mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >", "structmlx__atomic.html", "structmlx__atomic" ], + [ "MLXConvParams", "struct_m_l_x_conv_params.html", "struct_m_l_x_conv_params" ], + [ "MulOp", "struct_mul_op.html", "struct_mul_op" ], + [ "Multiply", "struct_multiply.html", "struct_multiply" ], + [ "NaNEqual", "struct_na_n_equal.html", "struct_na_n_equal" ], + [ "Negative", "struct_negative.html", "struct_negative" ], + [ "None", "struct_none.html", "struct_none" ], + [ "NotEqual", "struct_not_equal.html", "struct_not_equal" ], + [ "Or", "struct_or.html", null ], + [ "Power", "struct_power.html", "struct_power" ], + [ "Prod", "struct_prod.html", null ], + [ "QuantizedBlockLoader", "struct_quantized_block_loader.html", "struct_quantized_block_loader" ], + [ "ReadWriter", "struct_read_writer.html", "struct_read_writer" ], + [ "Real", "struct_real.html", "struct_real" ], + [ "Remainder", "struct_remainder.html", "struct_remainder" ], + [ "RightShift", "struct_right_shift.html", "struct_right_shift" ], + [ "Round", "struct_round.html", "struct_round" ], + [ "Rsqrt", "struct_rsqrt.html", "struct_rsqrt" ], + [ "ScaleOp", "struct_scale_op.html", "struct_scale_op" ], + [ "Select", "struct_select.html", "struct_select" ], + [ "Sigmoid", "struct_sigmoid.html", "struct_sigmoid" ], + [ "Sign", "struct_sign.html", "struct_sign" ], + [ "Sin", "struct_sin.html", "struct_sin" ], + [ "Sinh", "struct_sinh.html", "struct_sinh" ], + [ "Sqrt", "struct_sqrt.html", "struct_sqrt" ], + [ "Square", "struct_square.html", "struct_square" ], + [ "SubOp", "struct_sub_op.html", "struct_sub_op" ], + [ "Subtract", "struct_subtract.html", "struct_subtract" ], + [ "Sum", "struct_sum.html", null ], + [ "SumOp", "struct_sum_op.html", "struct_sum_op" ], + [ "Tan", "struct_tan.html", "struct_tan" ], + [ "Tanh", "struct_tanh.html", "struct_tanh" ], + [ "ThreadPool", "class_thread_pool.html", "class_thread_pool" ], + [ "ThreadSort", "struct_thread_sort.html", "struct_thread_sort" ], + [ "TransformScale", "struct_transform_scale.html", "struct_transform_scale" ] +]; \ No newline at end of file diff --git a/docs/build/html/array_8h.html b/docs/build/html/array_8h.html index d31e5609f..0428780f9 100644 --- a/docs/build/html/array_8h.html +++ b/docs/build/html/array_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/array.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+ - + - - + +
+ +
+
+
- - +
- -
-
Classes | @@ -129,17 +143,19 @@ Namespaces Typedefs using mlx::core::Deleter = std::function<void(allocator::Buffer)>   -using mlx::core::Shape = std::vector<int32_t> -  -using mlx::core::Strides = std::vector<size_t> -  +using mlx::core::ShapeElem = int32_t +  +using mlx::core::Shape = std::vector<ShapeElem> +  +using mlx::core::Strides = std::vector<int64_t> +  template<typename... T> using mlx::core::enable_for_arrays_t = typename std::enable_if_t<is_arrays_v<T...>>   - + @@ -147,10 +163,13 @@ Variables

Variables

template<typename T >
template<typename T>
constexpr bool mlx::core::is_array_v
 
template<typename... T>
 
- -
+ + diff --git a/docs/build/html/array_8h.js b/docs/build/html/array_8h.js new file mode 100644 index 000000000..84d221b85 --- /dev/null +++ b/docs/build/html/array_8h.js @@ -0,0 +1,14 @@ +var array_8h = +[ + [ "mlx::core::array", "classmlx_1_1core_1_1array.html", "classmlx_1_1core_1_1array" ], + [ "mlx::core::array::ArrayIterator", "structmlx_1_1core_1_1array_1_1_array_iterator.html", "structmlx_1_1core_1_1array_1_1_array_iterator" ], + [ "mlx::core::array::Data", "structmlx_1_1core_1_1array_1_1_data.html", "structmlx_1_1core_1_1array_1_1_data" ], + [ "mlx::core::array::Flags", "structmlx_1_1core_1_1array_1_1_flags.html", "structmlx_1_1core_1_1array_1_1_flags" ], + [ "mlx::core::Deleter", "namespacemlx_1_1core.html#af834c1e18d6f11c4f233a2e1ce814a4b", null ], + [ "mlx::core::enable_for_arrays_t", "namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114", null ], + [ "mlx::core::Shape", "namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416", null ], + [ "mlx::core::ShapeElem", "namespacemlx_1_1core.html#a167cdec84c0ae62b5b299c617384346e", null ], + [ "mlx::core::Strides", "namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c", null ], + [ "mlx::core::is_array_v", "namespacemlx_1_1core.html#a01b0d64a75dfa2e95d6c7b5c53d708af", null ], + [ "mlx::core::is_arrays_v", "namespacemlx_1_1core.html#a94c1057929b390e5613304afa16dfbda", null ] +]; \ No newline at end of file diff --git a/docs/build/html/array_8h_source.html b/docs/build/html/array_8h_source.html index 09cfd38d2..56e50f9a5 100644 --- a/docs/build/html/array_8h_source.html +++ b/docs/build/html/array_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/array.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - + +
+ +
+
+
- - +
- -
-
array.h
@@ -107,739 +121,741 @@ $(function(){ initResizable(false); });
14namespace mlx::core {
15
16// Forward declaration
-
17class Primitive;
+
17class Primitive;
18
19using Deleter = std::function<void(allocator::Buffer)>;
-
20using Shape = std::vector<int32_t>;
-
21using Strides = std::vector<size_t>;
-
22
-
-
23class array {
-
24 /* An array is really a node in a graph. It contains a shared ArrayDesc
-
25 * object */
-
26
-
27 public:
-
29 template <typename T>
-
30 explicit array(T val, Dtype dtype = TypeToDtype<T>());
-
31
-
32 /* Special case since std::complex can't be implicitly converted to other
-
33 * types. */
-
34 explicit array(const std::complex<float>& val, Dtype dtype = complex64);
-
35
-
36 template <typename It>
-
37 array(
-
38 It data,
- -
40 Dtype dtype =
-
41 TypeToDtype<typename std::iterator_traits<It>::value_type>());
-
42
-
43 template <typename T>
-
44 array(std::initializer_list<T> data, Dtype dtype = TypeToDtype<T>());
-
45
-
46 /* Special case so empty lists default to float32. */
-
47 array(std::initializer_list<float> data);
-
48
-
49 /* Special case so array({}, type) is an empty array. */
-
50 array(std::initializer_list<int> data, Dtype dtype);
-
51
-
52 template <typename T>
-
53 array(
-
54 std::initializer_list<T> data,
- - -
57
-
58 /* Build an array from a buffer */
- - - - -
63 Deleter deleter = allocator::free);
-
64
-
66 array& operator=(const array& other) && = delete;
-
67 array& operator=(array&& other) && = delete;
-
68
-
70 array& operator=(array&& other) & = default;
-
71 array(const array& other) = default;
-
72 array(array&& other) = default;
-
73
-
-
74 array& operator=(const array& other) & {
-
75 if (this->id() != other.id()) {
-
76 this->array_desc_ = other.array_desc_;
-
77 }
-
78 return *this;
-
79 }
+
20using ShapeElem = int32_t;
+
21using Shape = std::vector<ShapeElem>;
+
22using Strides = std::vector<int64_t>;
+
23
+
+
24class array {
+
25 /* An array is really a node in a graph. It contains a shared ArrayDesc
+
26 * object */
+
27
+
28 public:
+
30 template <typename T>
+
31 explicit array(T val, Dtype dtype = TypeToDtype<T>());
+
32
+
33 /* Special case since std::complex can't be implicitly converted to other
+
34 * types. */
+
35 explicit array(const std::complex<float>& val, Dtype dtype = complex64);
+
36
+
37 template <typename It>
+
38 explicit array(
+
39 It data,
+ +
41 Dtype dtype =
+
42 TypeToDtype<typename std::iterator_traits<It>::value_type>());
+
43
+
44 template <typename T>
+
45 explicit array(std::initializer_list<T> data, Dtype dtype = TypeToDtype<T>());
+
46
+
47 /* Special case so empty lists default to float32. */
+
48 explicit array(std::initializer_list<float> data);
+
49
+
50 /* Special case so array({}, type) is an empty array. */
+
51 explicit array(std::initializer_list<int> data, Dtype dtype);
+
52
+
53 template <typename T>
+
54 explicit array(
+
55 std::initializer_list<T> data,
+ + +
58
+
59 /* Build an array from a buffer */
+
60 explicit array(
+ + + +
64 Deleter deleter = allocator::free);
+
65
+
67 array& operator=(const array& other) && = delete;
+
68 array& operator=(array&& other) && = delete;
+
69
+
71 array& operator=(array&& other) & = default;
+
72 array(const array& other) = default;
+
73 array(array&& other) = default;
+
74
+
+
75 array& operator=(const array& other) & {
+
76 if (this->id() != other.id()) {
+
77 this->array_desc_ = other.array_desc_;
+
78 }
+
79 return *this;
+
80 }
-
80
-
-
82 size_t itemsize() const {
-
83 return size_of(dtype());
-
84 }
+
81
+
+
83 size_t itemsize() const {
+
84 return size_of(dtype());
+
85 }
-
85
-
-
87 size_t size() const {
-
88 return array_desc_->size;
-
89 }
+
86
+
+
88 size_t size() const {
+
89 return array_desc_->size;
+
90 }
-
90
-
-
92 size_t nbytes() const {
-
93 return size() * itemsize();
-
94 }
+
91
+
+
93 size_t nbytes() const {
+
94 return size() * itemsize();
+
95 }
-
95
-
-
97 size_t ndim() const {
-
98 return array_desc_->shape.size();
-
99 }
+
96
+
+
98 size_t ndim() const {
+
99 return array_desc_->shape.size();
+
100 }
-
100
-
-
102 const Shape& shape() const {
-
103 return array_desc_->shape;
-
104 }
+
101
+
+
103 const Shape& shape() const {
+
104 return array_desc_->shape;
+
105 }
-
105
-
-
111 auto shape(int dim) const {
-
112 return shape().at(dim < 0 ? dim + ndim() : dim);
-
113 }
+
106
+
+
112 auto shape(int dim) const {
+
113 return shape().at(dim < 0 ? dim + ndim() : dim);
+
114 }
-
114
-
-
116 const Strides& strides() const {
-
117 return array_desc_->strides;
-
118 }
+
115
+
+
117 const Strides& strides() const {
+
118 return array_desc_->strides;
+
119 }
-
119
-
-
125 auto strides(int dim) const {
-
126 return strides().at(dim < 0 ? dim + ndim() : dim);
-
127 }
+
120
+
+
126 auto strides(int dim) const {
+
127 return strides().at(dim < 0 ? dim + ndim() : dim);
+
128 }
-
128
-
-
130 Dtype dtype() const {
-
131 return array_desc_->dtype;
-
132 }
+
129
+
+
131 Dtype dtype() const {
+
132 return array_desc_->dtype;
+
133 }
-
133
-
135 void eval();
-
136
-
138 template <typename T>
-
139 T item();
-
140
-
141 template <typename T>
-
142 T item() const;
-
143
-
- -
145 using iterator_category = std::random_access_iterator_tag;
-
146 using difference_type = size_t;
-
147 using value_type = const array;
- -
149
-
150 explicit ArrayIterator(const array& arr, int idx = 0);
-
151
- -
153
-
- -
155 idx += diff;
-
156 return *this;
-
157 }
+
134
+
136 void eval();
+
137
+
139 template <typename T>
+
140 T item();
+
141
+
142 template <typename T>
+
143 T item() const;
+
144
+
+ +
146 using iterator_category = std::random_access_iterator_tag;
+
147 using difference_type = size_t;
+
148 using value_type = const array;
+ +
150
+
151 explicit ArrayIterator(const array& arr, int idx = 0);
+
152
+ +
154
+
+ +
156 idx += diff;
+
157 return *this;
+
158 }
-
158
-
- -
160 idx++;
-
161 return *this;
-
162 }
+
159
+
+ +
161 idx++;
+
162 return *this;
+
163 }
-
163
-
-
164 friend bool operator==(const ArrayIterator& a, const ArrayIterator& b) {
-
165 return a.arr.id() == b.arr.id() && a.idx == b.idx;
-
166 }
+
164
+
+
165 friend bool operator==(const ArrayIterator& a, const ArrayIterator& b) {
+
166 return a.arr.id() == b.arr.id() && a.idx == b.idx;
+
167 }
-
-
167 friend bool operator!=(const ArrayIterator& a, const ArrayIterator& b) {
-
168 return !(a == b);
-
169 }
+
+
168 friend bool operator!=(const ArrayIterator& a, const ArrayIterator& b) {
+
169 return !(a == b);
+
170 }
-
170
-
171 private:
-
172 const array& arr;
-
173 int idx;
-
174 };
+
171
+
172 private:
+
173 const array& arr;
+
174 int idx;
+
175 };
-
175
-
- -
177 return ArrayIterator(*this);
-
178 }
+
176
+
+ +
178 return ArrayIterator(*this);
+
179 }
-
- -
180 return ArrayIterator(*this, shape(0));
-
181 }
+
+ +
181 return ArrayIterator(*this, shape(0));
+
182 }
-
182
- -
190 Shape shape,
-
191 Dtype dtype,
-
192 std::shared_ptr<Primitive> primitive,
-
193 std::vector<array> inputs);
-
194
-
195 static std::vector<array> make_arrays(
-
196 std::vector<Shape> shapes,
-
197 const std::vector<Dtype>& dtypes,
-
198 const std::shared_ptr<Primitive>& primitive,
-
199 const std::vector<array>& inputs);
-
200
-
-
202 std::uintptr_t id() const {
-
203 return reinterpret_cast<std::uintptr_t>(array_desc_.get());
-
204 }
+
183
+
189
+ +
191 Shape shape,
+
192 Dtype dtype,
+
193 std::shared_ptr<Primitive> primitive,
+
194 std::vector<array> inputs);
+
195
+
196 static std::vector<array> make_arrays(
+
197 std::vector<Shape> shapes,
+
198 const std::vector<Dtype>& dtypes,
+
199 const std::shared_ptr<Primitive>& primitive,
+
200 const std::vector<array>& inputs);
+
201
+
+
203 std::uintptr_t id() const {
+
204 return reinterpret_cast<std::uintptr_t>(array_desc_.get());
+
205 }
-
205
-
-
207 std::uintptr_t primitive_id() const {
-
208 return reinterpret_cast<std::uintptr_t>(array_desc_->primitive.get());
-
209 }
+
206
+
+
208 std::uintptr_t primitive_id() const {
+
209 return reinterpret_cast<std::uintptr_t>(array_desc_->primitive.get());
+
210 }
-
210
-
-
211 struct Data {
- - -
- -
215 : buffer(buffer), d(d) {}
+
211
+
+
212 struct Data {
+ + + -
216 // Not copyable
-
217 Data(const Data& d) = delete;
-
218 Data& operator=(const Data& d) = delete;
-
- -
220 d(buffer);
-
221 }
+
217 // Not copyable
+
218 Data(const Data& d) = delete;
+
219 Data& operator=(const Data& d) = delete;
+
+ +
221 d(buffer);
+
222 }
-
222 };
+
223 };
-
223
-
-
224 struct Flags {
-
225 // True iff there are no gaps in the underlying data. Each item
-
226 // in the underlying data buffer belongs to at least one index.
-
227 //
-
228 // True iff:
-
229 // prod(shape[i] for i in range(ndim) if strides[i] > 0) == data_size()
-
230 bool contiguous : 1;
-
231
-
232 // True iff:
-
233 // strides[-1] == 1 and
-
234 // all(strides[i] == (shape[i+1]*strides[i+1]) or shape[i] == 1 for i in
-
235 // range(ndim - 1))
- -
237
-
238 // True iff:
-
239 // strides[0] == 1 and
-
240 // all(strides[i] == (shape[i-1]*strides[i-1]) or shape[i] == 1 for i in
-
241 // range(1, ndim))
- -
243 };
+
224
+
+
225 struct Flags {
+
226 // True iff there are no gaps in the underlying data. Each item
+
227 // in the underlying data buffer belongs to at least one index.
+
228 //
+
229 // True iff:
+
230 // prod(shape[i] for i in range(ndim) if strides[i] > 0) == data_size()
+
231 bool contiguous : 1;
+
232
+
233 // True iff:
+
234 // strides[-1] == 1 and
+
235 // all(strides[i] == (shape[i+1]*strides[i+1]) or shape[i] == 1 for i in
+
236 // range(ndim - 1))
+ +
238
+
239 // True iff:
+
240 // strides[0] == 1 and
+
241 // all(strides[i] == (shape[i-1]*strides[i-1]) or shape[i] == 1 for i in
+
242 // range(1, ndim))
+ +
244 };
-
244
-
- -
247 return *(array_desc_->primitive);
-
248 }
+
245
+
+ +
248 return *(array_desc_->primitive);
+
249 }
-
249
-
-
251 std::shared_ptr<Primitive>& primitive_ptr() const {
-
252 return array_desc_->primitive;
-
253 }
+
250
+
+
252 std::shared_ptr<Primitive>& primitive_ptr() const {
+
253 return array_desc_->primitive;
+
254 }
-
254
-
-
256 bool has_primitive() const {
-
257 return array_desc_->primitive != nullptr;
-
258 }
+
255
+
+
257 bool has_primitive() const {
+
258 return array_desc_->primitive != nullptr;
+
259 }
-
259
-
-
261 const std::vector<array>& inputs() const {
-
262 return array_desc_->inputs;
-
263 }
+
260
+
+
262 const std::vector<array>& inputs() const {
+
263 return array_desc_->inputs;
+
264 }
-
264
-
-
265 std::vector<array>& inputs() {
-
266 return array_desc_->inputs;
-
267 }
+
265
+
+
266 std::vector<array>& inputs() {
+
267 return array_desc_->inputs;
+
268 }
-
268
-
-
270 bool is_donatable() const {
-
271 return array_desc_.use_count() == 1 && (array_desc_->data.use_count() == 1);
-
272 }
+
269
+
+
271 bool is_donatable() const {
+
272 return array_desc_.use_count() == 1 && (array_desc_->data.use_count() == 1);
+
273 }
-
273
-
-
275 const std::vector<array>& siblings() const {
-
276 return array_desc_->siblings;
-
277 }
+
274
+
+
276 const std::vector<array>& siblings() const {
+
277 return array_desc_->siblings;
+
278 }
-
278
-
-
280 std::vector<array>& siblings() {
-
281 return array_desc_->siblings;
-
282 }
+
279
+
+
281 std::vector<array>& siblings() {
+
282 return array_desc_->siblings;
+
283 }
-
283
-
-
284 void set_siblings(std::vector<array> siblings, uint16_t position) {
-
285 array_desc_->siblings = std::move(siblings);
-
286 array_desc_->position = position;
-
287 }
+
284
+
+
285 void set_siblings(std::vector<array> siblings, uint16_t position) {
+
286 array_desc_->siblings = std::move(siblings);
+
287 array_desc_->position = position;
+
288 }
-
288
-
-
291 std::vector<array> outputs() const {
-
292 auto idx = array_desc_->position;
-
293 std::vector<array> outputs;
-
294 outputs.reserve(siblings().size() + 1);
-
295 outputs.insert(outputs.end(), siblings().begin(), siblings().begin() + idx);
-
296 outputs.push_back(*this);
-
297 outputs.insert(outputs.end(), siblings().begin() + idx, siblings().end());
-
298 return outputs;
-
299 }
+
289
+
+
292 std::vector<array> outputs() const {
+
293 auto idx = array_desc_->position;
+
294 std::vector<array> outputs;
+
295 outputs.reserve(siblings().size() + 1);
+
296 outputs.insert(outputs.end(), siblings().begin(), siblings().begin() + idx);
+
297 outputs.push_back(*this);
+
298 outputs.insert(outputs.end(), siblings().begin() + idx, siblings().end());
+
299 return outputs;
+
300 }
-
300
-
302 void detach();
-
303
-
-
305 const Flags& flags() const {
-
306 return array_desc_->flags;
-
307 }
+
301
+
303 void detach();
+
304
+
+
306 const Flags& flags() const {
+
307 return array_desc_->flags;
+
308 }
-
308
-
-
319 size_t data_size() const {
-
320 return array_desc_->data_size;
-
321 }
+
309
+
+
320 size_t data_size() const {
+
321 return array_desc_->data_size;
+
322 }
-
322
-
- -
324 return array_desc_->data->buffer;
-
325 }
+
323
+
+ +
325 return array_desc_->data->buffer;
+
326 }
-
-
326 const allocator::Buffer& buffer() const {
-
327 return array_desc_->data->buffer;
-
328 }
+
+
327 const allocator::Buffer& buffer() const {
+
328 return array_desc_->data->buffer;
+
329 }
-
329
-
-
330 size_t buffer_size() const {
-
331 return allocator::allocator().size(buffer());
-
332 }
+
330
+
+
331 size_t buffer_size() const {
+
332 return allocator::allocator().size(buffer());
+
333 }
-
333
-
334 // Return a copy of the shared pointer
-
335 // to the array::Data struct
-
-
336 std::shared_ptr<Data> data_shared_ptr() const {
-
337 return array_desc_->data;
-
338 }
+
334
+
335 // Return a copy of the shared pointer
+
336 // to the array::Data struct
+
+
337 std::shared_ptr<Data> data_shared_ptr() const {
+
338 return array_desc_->data;
+
339 }
-
339 // Return a raw pointer to the arrays data
-
340 template <typename T>
-
-
341 T* data() {
-
342 return static_cast<T*>(array_desc_->data_ptr);
-
343 }
+
340 // Return a raw pointer to the arrays data
+
341 template <typename T>
+
+
342 T* data() {
+
343 return static_cast<T*>(array_desc_->data_ptr);
+
344 }
-
344
-
345 template <typename T>
-
-
346 const T* data() const {
-
347 return static_cast<T*>(array_desc_->data_ptr);
-
348 }
+
345
+
346 template <typename T>
+
+
347 const T* data() const {
+
348 return static_cast<T*>(array_desc_->data_ptr);
+
349 }
-
349
-
-
350 enum Status {
-
351 // The ouptut of a computation which has not been scheduled.
-
352 // For example, the status of `x` in `auto x = a + b`.
- -
354
-
355 // The ouptut of a computation which has been scheduled but `eval_*` has
-
356 // not yet been called on the array's primitive. A possible
-
357 // status of `x` in `auto x = a + b; eval(x);`
- -
359
-
360 // The array's `eval_*` function has been run, but the computation is not
-
361 // necessarily complete. The array will have memory allocated and if it is
-
362 // not a tracer then it will be detached from the graph.
- -
364
-
365 // If the array is the output of a computation then the computation
-
366 // is complete. Constant arrays are always available (e.g. `array({1, 2,
-
367 // 3})`)
- -
369 };
+
350
+
+
351 enum Status {
+
352 // The ouptut of a computation which has not been scheduled.
+
353 // For example, the status of `x` in `auto x = a + b`.
+ +
355
+
356 // The ouptut of a computation which has been scheduled but `eval_*` has
+
357 // not yet been called on the array's primitive. A possible
+
358 // status of `x` in `auto x = a + b; eval(x);`
+ +
360
+
361 // The array's `eval_*` function has been run, but the computation is not
+
362 // necessarily complete. The array will have memory allocated and if it is
+
363 // not a tracer then it will be detached from the graph.
+ +
365
+
366 // If the array is the output of a computation then the computation
+
367 // is complete. Constant arrays are always available (e.g. `array({1, 2,
+
368 // 3})`)
+ +
370 };
-
370
-
371 // Check if the array is safe to read.
-
372 bool is_available() const;
-
373
-
374 // Wait on the array to be available. After this `is_available` returns
-
375 // `true`.
-
376 void wait();
-
377
-
-
378 Status status() const {
-
379 return array_desc_->status;
-
380 }
+
371
+
372 // Check if the array is safe to read.
+
373 bool is_available() const;
+
374
+
375 // Wait on the array to be available. After this `is_available` returns
+
376 // `true`.
+
377 void wait();
+
378
+
+
379 Status status() const {
+
380 return array_desc_->status;
+
381 }
-
381
-
-
382 void set_status(Status s) const {
-
383 array_desc_->status = s;
-
384 }
+
382
+
+
383 void set_status(Status s) const {
+
384 array_desc_->status = s;
+
385 }
-
385
-
386 // Get the array's shared event
-
-
387 Event& event() const {
-
388 return array_desc_->event;
-
389 }
+
386
+
387 // Get the array's shared event
+
+
388 Event& event() const {
+
389 return array_desc_->event;
+
390 }
-
390
-
391 // Attach an event to a not yet evaluated array
-
-
392 void attach_event(Event e) const {
-
393 array_desc_->event = std::move(e);
-
394 }
+
391
+
392 // Attach an event to a not yet evaluated array
+
+
393 void attach_event(Event e) const {
+
394 array_desc_->event = std::move(e);
+
395 }
-
395
-
396 // Mark the array as a tracer array (true) or not.
-
- -
398 array_desc_->is_tracer = is_tracer;
-
399 }
+
396
+
397 // Mark the array as a tracer array (true) or not.
+
+ +
399 array_desc_->is_tracer = is_tracer;
+
400 }
-
400 // Check if the array is a tracer array
-
401 bool is_tracer() const;
-
402
- -
404
- - -
407 size_t data_size,
- -
409 Flags flags,
- -
411
- -
413 const array& other,
-
414 const Strides& strides,
-
415 Flags flags,
-
416 size_t data_size,
-
417 size_t offset = 0);
-
418
-
419 void copy_shared_buffer(const array& other);
-
420
- -
422 array other,
-
423 const Strides& strides,
-
424 Flags flags,
-
425 size_t data_size,
-
426 size_t offset = 0);
-
427
- -
429
-
-
430 void overwrite_descriptor(const array& other) {
-
431 array_desc_ = other.array_desc_;
-
432 }
+
401 // Check if the array is a tracer array
+
402 bool is_tracer() const;
+
403
+ +
405
+ + +
408 size_t data_size,
+ +
410 Flags flags,
+ +
412
+ +
414 const array& other,
+
415 const Strides& strides,
+
416 Flags flags,
+
417 size_t data_size,
+
418 size_t offset = 0);
+
419
+
420 void copy_shared_buffer(const array& other);
+
421
+ +
423 array other,
+
424 const Strides& strides,
+
425 Flags flags,
+
426 size_t data_size,
+
427 size_t offset = 0);
+
428
+ +
430
+
+
431 void overwrite_descriptor(const array& other) {
+
432 array_desc_ = other.array_desc_;
+
433 }
-
433
- -
435
-
436 private:
-
437 // Initialize the arrays data
-
438 template <typename It>
-
439 void init(const It src);
-
440
-
441 struct ArrayDesc {
-
442 Shape shape;
-
443 Strides strides;
-
444 size_t size;
-
445 Dtype dtype;
-
446 std::shared_ptr<Primitive> primitive;
-
447
-
448 Status status;
-
449
-
450 // An event on the array used for synchronization
-
451 Event event;
-
452
-
453 // Indicates an array is being used in a graph transform
-
454 // and should not be detached from the graph
-
455 bool is_tracer{false};
-
456
-
457 // This is a shared pointer so that *different* arrays
-
458 // can share the underlying data buffer.
-
459 std::shared_ptr<Data> data;
-
460
-
461 // Properly offset data pointer
-
462 void* data_ptr{nullptr};
-
463
-
464 // The size in elements of the data buffer the array accesses
-
465 size_t data_size;
-
466
-
467 // Contains useful meta data about the array
-
468 Flags flags;
-
469
-
470 std::vector<array> inputs;
-
471 // An array to keep track of the siblings from a multi-output
-
472 // primitive.
-
473 std::vector<array> siblings;
-
474 // The arrays position in the output list
-
475 uint32_t position{0};
-
476
-
477 explicit ArrayDesc(Shape shape, Dtype dtype);
-
478
-
479 explicit ArrayDesc(
-
480 Shape shape,
-
481 Dtype dtype,
-
482 std::shared_ptr<Primitive> primitive,
-
483 std::vector<array> inputs);
-
484
-
485 ~ArrayDesc();
-
486
-
487 private:
-
488 // Initialize size, strides, and other metadata
-
489 void init();
-
490 };
-
491
-
492 // The ArrayDesc contains the details of the materialized array including the
-
493 // shape, strides, the data type. It also includes
-
494 // the primitive which knows how to compute the array's data from its inputs
-
495 // and the list of array's inputs for the primitive.
-
496 std::shared_ptr<ArrayDesc> array_desc_;
-
497};
+
434
+ +
436
+
437 private:
+
438 // Initialize the arrays data
+
439 template <typename It>
+
440 void init(const It src);
+
441
+
442 struct ArrayDesc {
+
443 Shape shape;
+ +
445 size_t size;
+
446 Dtype dtype;
+
447 std::shared_ptr<Primitive> primitive;
+
448
+ +
450
+
451 // An event on the array used for synchronization
+
452 Event event;
+
453
+
454 // Indicates an array is being used in a graph transform
+
455 // and should not be detached from the graph
+
456 bool is_tracer{false};
+
457
+
458 // This is a shared pointer so that *different* arrays
+
459 // can share the underlying data buffer.
+
460 std::shared_ptr<Data> data;
+
461
+
462 // Properly offset data pointer
+
463 void* data_ptr{nullptr};
+
464
+
465 // The size in elements of the data buffer the array accesses
+
466 size_t data_size;
+
467
+
468 // Contains useful meta data about the array
+
469 Flags flags;
+
470
+
471 std::vector<array> inputs;
+
472 // An array to keep track of the siblings from a multi-output
+
473 // primitive.
+
474 std::vector<array> siblings;
+
475 // The arrays position in the output list
+
476 uint32_t position{0};
+
477
+
478 explicit ArrayDesc(Shape shape, Dtype dtype);
+
479
+
480 explicit ArrayDesc(
+
481 Shape shape,
+
482 Dtype dtype,
+
483 std::shared_ptr<Primitive> primitive,
+
484 std::vector<array> inputs);
+
485
+
486 ~ArrayDesc();
+
487
+
488 private:
+
489 // Initialize size, strides, and other metadata
+
490 void init();
+
491 };
+
492
+
493 // The ArrayDesc contains the details of the materialized array including the
+
494 // shape, strides, the data type. It also includes
+
495 // the primitive which knows how to compute the array's data from its inputs
+
496 // and the list of array's inputs for the primitive.
+
497 std::shared_ptr<ArrayDesc> array_desc_;
+
498};
-
498
-
499template <typename T>
-
-
500array::array(T val, Dtype dtype /* = TypeToDtype<T>() */)
-
501 : array_desc_(std::make_shared<ArrayDesc>(std::vector<int>{}, dtype)) {
-
502 init(&val);
-
503}
+
499
+
500template <typename T>
+
+
501array::array(T val, Dtype dtype /* = TypeToDtype<T>() */)
+
502 : array_desc_(std::make_shared<ArrayDesc>(Shape{}, dtype)) {
+
503 init(&val);
+
504}
-
504
-
505template <typename It>
-
- -
507 It data,
-
508 Shape shape,
-
509 Dtype dtype /* = TypeToDtype<typename std::iterator_traits<It>::value_type>() */) :
-
510 array_desc_(std::make_shared<ArrayDesc>(std::move(shape), dtype)) {
-
511 init(data);
-
512}
+
505
+
506template <typename It>
+
+ +
508 It data,
+
509 Shape shape,
+
510 Dtype dtype /* = TypeToDtype<typename std::iterator_traits<It>::value_type>() */) :
+
511 array_desc_(std::make_shared<ArrayDesc>(std::move(shape), dtype)) {
+
512 init(data);
+
513}
-
513
-
514template <typename T>
-
- -
516 std::initializer_list<T> data,
-
517 Dtype dtype /* = TypeToDtype<T>() */)
-
518 : array_desc_(std::make_shared<ArrayDesc>(
-
519 std::vector<int>{static_cast<int>(data.size())},
-
520 dtype)) {
-
521 init(data.begin());
-
522}
+
514
+
515template <typename T>
+
+ +
517 std::initializer_list<T> data,
+
518 Dtype dtype /* = TypeToDtype<T>() */)
+
519 : array_desc_(std::make_shared<ArrayDesc>(
+
520 Shape{static_cast<ShapeElem>(data.size())},
+
521 dtype)) {
+
522 init(data.begin());
+
523}
-
523
-
524template <typename T>
-
- -
526 std::initializer_list<T> data,
-
527 Shape shape,
-
528 Dtype dtype /* = TypeToDtype<T>() */)
-
529 : array_desc_(std::make_shared<ArrayDesc>(std::move(shape), dtype)) {
-
530 if (data.size() != size()) {
-
531 throw std::invalid_argument(
-
532 "Data size and provided shape mismatch in array construction.");
-
533 }
-
534 init(data.begin());
-
535}
+
524
+
525template <typename T>
+
+ +
527 std::initializer_list<T> data,
+
528 Shape shape,
+
529 Dtype dtype /* = TypeToDtype<T>() */)
+
530 : array_desc_(std::make_shared<ArrayDesc>(std::move(shape), dtype)) {
+
531 if (data.size() != size()) {
+
532 throw std::invalid_argument(
+
533 "Data size and provided shape mismatch in array construction.");
+
534 }
+
535 init(data.begin());
+
536}
-
536
-
537template <typename T>
-
- -
539 if (size() != 1) {
-
540 throw std::invalid_argument("item can only be called on arrays of size 1.");
-
541 }
-
542 eval();
-
543 return *data<T>();
-
544}
+
537
+
538template <typename T>
+
+ +
540 if (size() != 1) {
+
541 throw std::invalid_argument("item can only be called on arrays of size 1.");
+
542 }
+
543 eval();
+
544 return *data<T>();
+
545}
-
545
-
546template <typename T>
-
-
547T array::item() const {
-
548 if (size() != 1) {
-
549 throw std::invalid_argument("item can only be called on arrays of size 1.");
-
550 }
-
551 if (status() == Status::unscheduled) {
-
552 throw std::invalid_argument(
-
553 "item() const can only be called on evaled arrays");
-
554 }
-
555 const_cast<array*>(this)->eval();
-
556 return *data<T>();
-
557}
+
546
+
547template <typename T>
+
+
548T array::item() const {
+
549 if (size() != 1) {
+
550 throw std::invalid_argument("item can only be called on arrays of size 1.");
+
551 }
+
552 if (status() == Status::unscheduled) {
+
553 throw std::invalid_argument(
+
554 "item() const can only be called on evaled arrays");
+
555 }
+
556 const_cast<array*>(this)->eval();
+
557 return *data<T>();
+
558}
-
558
-
559template <typename It>
-
560void array::init(It src) {
- -
562 switch (dtype()) {
-
563 case bool_:
-
564 std::copy(src, src + size(), data<bool>());
-
565 break;
-
566 case uint8:
-
567 std::copy(src, src + size(), data<uint8_t>());
-
568 break;
-
569 case uint16:
-
570 std::copy(src, src + size(), data<uint16_t>());
-
571 break;
-
572 case uint32:
-
573 std::copy(src, src + size(), data<uint32_t>());
-
574 break;
-
575 case uint64:
-
576 std::copy(src, src + size(), data<uint64_t>());
-
577 break;
-
578 case int8:
-
579 std::copy(src, src + size(), data<int8_t>());
-
580 break;
-
581 case int16:
-
582 std::copy(src, src + size(), data<int16_t>());
-
583 break;
-
584 case int32:
-
585 std::copy(src, src + size(), data<int32_t>());
-
586 break;
-
587 case int64:
-
588 std::copy(src, src + size(), data<int64_t>());
-
589 break;
-
590 case float16:
-
591 std::copy(src, src + size(), data<float16_t>());
-
592 break;
-
593 case float32:
-
594 std::copy(src, src + size(), data<float>());
-
595 break;
-
596 case bfloat16:
-
597 std::copy(src, src + size(), data<bfloat16_t>());
-
598 break;
-
599 case complex64:
-
600 std::copy(src, src + size(), data<complex64_t>());
-
601 break;
-
602 }
-
603}
-
604
-
605/* Utilities for determining whether a template parameter is array. */
-
606template <typename T>
-
607inline constexpr bool is_array_v =
-
608 std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, array>;
-
609
-
610template <typename... T>
-
611inline constexpr bool is_arrays_v = (is_array_v<T> && ...);
-
612
-
613template <typename... T>
-
614using enable_for_arrays_t = typename std::enable_if_t<is_arrays_v<T...>>;
-
615
-
616} // namespace mlx::core
+
559
+
560template <typename It>
+
561void array::init(It src) {
+ +
563 switch (dtype()) {
+
564 case bool_:
+
565 std::copy(src, src + size(), data<bool>());
+
566 break;
+
567 case uint8:
+
568 std::copy(src, src + size(), data<uint8_t>());
+
569 break;
+
570 case uint16:
+
571 std::copy(src, src + size(), data<uint16_t>());
+
572 break;
+
573 case uint32:
+
574 std::copy(src, src + size(), data<uint32_t>());
+
575 break;
+
576 case uint64:
+
577 std::copy(src, src + size(), data<uint64_t>());
+
578 break;
+
579 case int8:
+
580 std::copy(src, src + size(), data<int8_t>());
+
581 break;
+
582 case int16:
+
583 std::copy(src, src + size(), data<int16_t>());
+
584 break;
+
585 case int32:
+
586 std::copy(src, src + size(), data<int32_t>());
+
587 break;
+
588 case int64:
+
589 std::copy(src, src + size(), data<int64_t>());
+
590 break;
+
591 case float16:
+
592 std::copy(src, src + size(), data<float16_t>());
+
593 break;
+
594 case float32:
+
595 std::copy(src, src + size(), data<float>());
+
596 break;
+
597 case bfloat16:
+
598 std::copy(src, src + size(), data<bfloat16_t>());
+
599 break;
+
600 case complex64:
+
601 std::copy(src, src + size(), data<complex64_t>());
+
602 break;
+
603 }
+
604}
+
605
+
606/* Utilities for determining whether a template parameter is array. */
+
607template <typename T>
+
608inline constexpr bool is_array_v =
+
609 std::is_same_v<std::remove_cv_t<std::remove_reference_t<T>>, array>;
+
610
+
611template <typename... T>
+
612inline constexpr bool is_arrays_v = (is_array_v<T> && ...);
+
613
+
614template <typename... T>
+
615using enable_for_arrays_t = typename std::enable_if_t<is_arrays_v<T...>>;
+
616
+
617} // namespace mlx::core
Definition event.h:11
Definition primitives.h:48
virtual size_t size(Buffer buffer) const =0
Definition allocator.h:12
-
Definition array.h:23
-
void attach_event(Event e) const
Definition array.h:392
-
const Flags & flags() const
Get the Flags bit-field.
Definition array.h:305
-
Event & event() const
Definition array.h:387
-
Status
Definition array.h:350
-
@ available
Definition array.h:368
-
@ evaluated
Definition array.h:363
-
@ unscheduled
Definition array.h:353
-
@ scheduled
Definition array.h:358
-
const Shape & shape() const
The shape of the array as a vector of integers.
Definition array.h:102
+
Definition array.h:24
+
void attach_event(Event e) const
Definition array.h:393
+
const Flags & flags() const
Get the Flags bit-field.
Definition array.h:306
+
Event & event() const
Definition array.h:388
+
Status
Definition array.h:351
+
@ available
Definition array.h:369
+
@ evaluated
Definition array.h:364
+
@ unscheduled
Definition array.h:354
+
@ scheduled
Definition array.h:359
+
const Shape & shape() const
The shape of the array as a vector of integers.
Definition array.h:103
void eval()
Evaluate the array.
-
const Strides & strides() const
The strides of the array.
Definition array.h:116
-
const std::vector< array > & inputs() const
The array's inputs.
Definition array.h:261
+
const Strides & strides() const
The strides of the array.
Definition array.h:117
+
const std::vector< array > & inputs() const
The array's inputs.
Definition array.h:262
array(const array &other)=default
-
std::vector< array > outputs() const
The outputs of the array's primitive (i.e.
Definition array.h:291
+
std::vector< array > outputs() const
The outputs of the array's primitive (i.e.
Definition array.h:292
-
size_t nbytes() const
The number of bytes in the array.
Definition array.h:92
+
size_t nbytes() const
The number of bytes in the array.
Definition array.h:93
void move_shared_buffer(array other)
static std::vector< array > make_arrays(std::vector< Shape > shapes, const std::vector< Dtype > &dtypes, const std::shared_ptr< Primitive > &primitive, const std::vector< array > &inputs)
array(std::initializer_list< float > data)
-
bool is_donatable() const
True indicates the arrays buffer is safe to reuse.
Definition array.h:270
+
bool is_donatable() const
True indicates the arrays buffer is safe to reuse.
Definition array.h:271
array(allocator::Buffer data, Shape shape, Dtype dtype, Deleter deleter=allocator::free)
-
std::shared_ptr< Primitive > & primitive_ptr() const
A shared pointer to the array's primitive.
Definition array.h:251
-
size_t ndim() const
The number of dimensions of the array.
Definition array.h:97
-
size_t size() const
The number of elements in the array.
Definition array.h:87
+
std::shared_ptr< Primitive > & primitive_ptr() const
A shared pointer to the array's primitive.
Definition array.h:252
+
size_t ndim() const
The number of dimensions of the array.
Definition array.h:98
+
size_t size() const
The number of elements in the array.
Definition array.h:88
array & operator=(array &&other) &&=delete
-
array & operator=(const array &other) &
Definition array.h:74
-
ArrayIterator end() const
Definition array.h:179
+
array & operator=(const array &other) &
Definition array.h:75
+
ArrayIterator end() const
Definition array.h:180
array(std::initializer_list< int > data, Dtype dtype)
void set_data(allocator::Buffer buffer, size_t data_size, Strides strides, Flags flags, Deleter d=allocator::free)
-
const allocator::Buffer & buffer() const
Definition array.h:326
-
void set_status(Status s) const
Definition array.h:382
+
const allocator::Buffer & buffer() const
Definition array.h:327
+
void set_status(Status s) const
Definition array.h:383
array(const std::complex< float > &val, Dtype dtype=complex64)
-
Status status() const
Definition array.h:378
-
std::vector< array > & siblings()
The array's siblings.
Definition array.h:280
-
T * data()
Definition array.h:341
-
array(T val, Dtype dtype=TypeToDtype< T >())
Construct a scalar array with zero dimensions.
Definition array.h:500
-
ArrayIterator begin() const
Definition array.h:176
-
Primitive & primitive() const
The array's primitive.
Definition array.h:246
+
Status status() const
Definition array.h:379
+
std::vector< array > & siblings()
The array's siblings.
Definition array.h:281
+
T * data()
Definition array.h:342
+
array(T val, Dtype dtype=TypeToDtype< T >())
Construct a scalar array with zero dimensions.
Definition array.h:501
+
ArrayIterator begin() const
Definition array.h:177
+
Primitive & primitive() const
The array's primitive.
Definition array.h:247
void detach()
Detach the array from the graph.
array & operator=(const array &other) &&=delete
Assignment to rvalue does not compile.
-
void set_siblings(std::vector< array > siblings, uint16_t position)
Definition array.h:284
-
T item()
Get the value from a scalar array.
Definition array.h:538
-
size_t buffer_size() const
Definition array.h:330
+
void set_siblings(std::vector< array > siblings, uint16_t position)
Definition array.h:285
+
T item()
Get the value from a scalar array.
Definition array.h:539
+
size_t buffer_size() const
Definition array.h:331
void copy_shared_buffer(const array &other)
-
void overwrite_descriptor(const array &other)
Definition array.h:430
-
const T * data() const
Definition array.h:346
-
bool has_primitive() const
Check if the array has an attached primitive or is a leaf node.
Definition array.h:256
-
allocator::Buffer & buffer()
Definition array.h:323
+
void overwrite_descriptor(const array &other)
Definition array.h:431
+
const T * data() const
Definition array.h:347
+
bool has_primitive() const
Check if the array has an attached primitive or is a leaf node.
Definition array.h:257
+
allocator::Buffer & buffer()
Definition array.h:324
array(array &&other)=default
-
std::shared_ptr< Data > data_shared_ptr() const
Definition array.h:336
+
std::shared_ptr< Data > data_shared_ptr() const
Definition array.h:337
array(Shape shape, Dtype dtype, std::shared_ptr< Primitive > primitive, std::vector< array > inputs)
The following methods should be used with caution.
-
auto shape(int dim) const
Get the size of the corresponding dimension.
Definition array.h:111
-
auto strides(int dim) const
Get the stride of the corresponding dimension.
Definition array.h:125
-
const std::vector< array > & siblings() const
The array's siblings.
Definition array.h:275
-
std::vector< array > & inputs()
Definition array.h:265
+
auto shape(int dim) const
Get the size of the corresponding dimension.
Definition array.h:112
+
auto strides(int dim) const
Get the stride of the corresponding dimension.
Definition array.h:126
+
const std::vector< array > & siblings() const
The array's siblings.
Definition array.h:276
+
std::vector< array > & inputs()
Definition array.h:266
void copy_shared_buffer(const array &other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
array & operator=(array &&other) &=default
Default copy and move constructors otherwise.
void move_shared_buffer(array other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
-
std::uintptr_t id() const
A unique identifier for an array.
Definition array.h:202
-
Dtype dtype() const
Get the arrays data type.
Definition array.h:130
+
std::uintptr_t id() const
A unique identifier for an array.
Definition array.h:203
+
Dtype dtype() const
Get the arrays data type.
Definition array.h:131
bool is_available() const
-
void set_tracer(bool is_tracer)
Definition array.h:397
-
size_t itemsize() const
The size of the array's datatype in bytes.
Definition array.h:82
-
std::uintptr_t primitive_id() const
A unique identifier for an arrays primitive.
Definition array.h:207
+
void set_tracer(bool is_tracer)
Definition array.h:398
+
size_t itemsize() const
The size of the array's datatype in bytes.
Definition array.h:83
+
std::uintptr_t primitive_id() const
A unique identifier for an arrays primitive.
Definition array.h:208
bool is_tracer() const
void set_data(allocator::Buffer buffer, Deleter d=allocator::free)
-
size_t data_size() const
The size (in elements) of the underlying buffer the array points to.
Definition array.h:319
+
size_t data_size() const
The size (in elements) of the underlying buffer the array points to.
Definition array.h:320
array std(const array &a, bool keepdims, int ddof=0, StreamOrDevice s={})
Computes the standard deviation of the elements of an array.
@@ -847,54 +863,58 @@ $(function(){ initResizable(false); });
void free(Buffer buffer)
Allocator & allocator()
Definition allocator.h:7
-
constexpr bool is_array_v
Definition array.h:607
+
constexpr bool is_array_v
Definition array.h:608
constexpr Dtype bool_
Definition dtype.h:67
+
int32_t ShapeElem
Definition array.h:20
constexpr Dtype uint64
Definition dtype.h:72
constexpr Dtype uint16
Definition dtype.h:70
constexpr Dtype bfloat16
Definition dtype.h:81
constexpr Dtype int32
Definition dtype.h:76
constexpr Dtype float32
Definition dtype.h:80
+
std::vector< ShapeElem > Shape
Definition array.h:21
constexpr Dtype int16
Definition dtype.h:75
+
std::vector< int64_t > Strides
Definition array.h:22
constexpr Dtype int8
Definition dtype.h:74
constexpr Dtype int64
Definition dtype.h:77
-
constexpr bool is_arrays_v
Definition array.h:611
+
constexpr bool is_arrays_v
Definition array.h:612
constexpr Dtype uint8
Definition dtype.h:69
-
std::vector< int32_t > Shape
Definition array.h:20
constexpr Dtype float16
Definition dtype.h:79
constexpr Dtype uint32
Definition dtype.h:71
-
std::vector< size_t > Strides
Definition array.h:21
uint8_t size_of(const Dtype &t)
Definition dtype.h:102
std::function< void(allocator::Buffer)> Deleter
Definition array.h:19
-
typename std::enable_if_t< is_arrays_v< T... > > enable_for_arrays_t
Definition array.h:614
+
typename std::enable_if_t< is_arrays_v< T... > > enable_for_arrays_t
Definition array.h:615
constexpr Dtype complex64
Definition dtype.h:82
Definition dtype.h:13
Definition dtype.h:109
-
Definition array.h:144
+
Definition array.h:145
-
friend bool operator==(const ArrayIterator &a, const ArrayIterator &b)
Definition array.h:164
-
std::random_access_iterator_tag iterator_category
Definition array.h:145
-
ArrayIterator & operator++()
Definition array.h:159
-
friend bool operator!=(const ArrayIterator &a, const ArrayIterator &b)
Definition array.h:167
+
friend bool operator==(const ArrayIterator &a, const ArrayIterator &b)
Definition array.h:165
+
std::random_access_iterator_tag iterator_category
Definition array.h:146
+
ArrayIterator & operator++()
Definition array.h:160
+
value_type reference
Definition array.h:149
+
friend bool operator!=(const ArrayIterator &a, const ArrayIterator &b)
Definition array.h:168
ArrayIterator(const array &arr, int idx=0)
-
size_t difference_type
Definition array.h:146
-
const array value_type
Definition array.h:147
-
ArrayIterator & operator+(difference_type diff)
Definition array.h:154
-
Definition array.h:211
-
Deleter d
Definition array.h:213
-
Data(allocator::Buffer buffer, Deleter d=allocator::free)
Definition array.h:214
-
~Data()
Definition array.h:219
+
size_t difference_type
Definition array.h:147
+
const array value_type
Definition array.h:148
+
ArrayIterator & operator+(difference_type diff)
Definition array.h:155
+
Deleter d
Definition array.h:214
+
Data(allocator::Buffer buffer, Deleter d=allocator::free)
Definition array.h:215
+
~Data()
Definition array.h:220
Data(const Data &d)=delete
Data & operator=(const Data &d)=delete
-
allocator::Buffer buffer
Definition array.h:212
-
Definition array.h:224
-
bool row_contiguous
Definition array.h:236
-
bool col_contiguous
Definition array.h:242
-
bool contiguous
Definition array.h:230
+
allocator::Buffer buffer
Definition array.h:213
+
Definition array.h:225
+
bool row_contiguous
Definition array.h:237
+
bool col_contiguous
Definition array.h:243
+
bool contiguous
Definition array.h:231
- -
+ + diff --git a/docs/build/html/atomic_8h.html b/docs/build/html/atomic_8h.html index 64e3eeaa2..9e9399614 100644 --- a/docs/build/html/atomic_8h.html +++ b/docs/build/html/atomic_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/atomic.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -104,36 +118,36 @@ $(function(){ initResizable(false); }); Classes struct  mlx_atomic< T, typename >   -struct  mlx_atomic< T, enable_if_t< is_metal_atomic< T > > > +struct  mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >   - + - + - + - + - + - + - + - + - + @@ -142,13 +156,13 @@ Functions - +

Functions

template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC T mlx_atomic_load_explicit (device mlx_atomic< T > *object, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_store_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_and_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_or_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_min_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_max_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_add_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_mul_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit (device mlx_atomic< T > *object, thread T *expected, T val, size_t offset)
 
template<>
template<>
METAL_FUNC void mlx_atomic_fetch_max_explicit< float > (device mlx_atomic< float > *object, float val, size_t offset)
 
template<typename T , enable_if_t<!is_metal_atomic< T >, bool > = true>
template<typename T, enable_if_t<!is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit (device mlx_atomic< T > *object, thread uint *expected, uint val, size_t offset)
 
- +

Variables

template<typename T >
template<typename T>
constexpr constant bool is_metal_atomic
 
@@ -159,7 +173,7 @@ Variables
-template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
@@ -192,7 +206,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t<!is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit
@@ -225,7 +239,7 @@ template<typename T , enable_if_t<!
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit
@@ -253,7 +267,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_add_explicit
@@ -281,7 +295,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_and_explicit
@@ -337,7 +351,7 @@ template<>
-template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_max_explicit
@@ -393,7 +407,7 @@ template<>
-template<typename T , enable_if_t< is_metal_atomic< T >, bool > = true>
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_min_explicit
@@ -421,7 +435,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_mul_explicit
@@ -449,7 +463,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_or_explicit
@@ -472,7 +486,7 @@ template<typename T , enable_if_t<
+template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC T mlx_atomic_load_explicit
@@ -501,7 +515,7 @@ template<typename T , enable_if_t<
-template<typename T >
+template<typename T>
METAL_FUNC void mlx_atomic_store_explicit
@@ -512,7 +526,7 @@ template<typename T >
-constexpr +constexpr
- -
+ + diff --git a/docs/build/html/atomic_8h.js b/docs/build/html/atomic_8h.js new file mode 100644 index 000000000..191a21f81 --- /dev/null +++ b/docs/build/html/atomic_8h.js @@ -0,0 +1,18 @@ +var atomic_8h = +[ + [ "mlx_atomic< T, typename >", "structmlx__atomic.html", "structmlx__atomic" ], + [ "mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >", "structmlx__atomic.html", "structmlx__atomic" ], + [ "mlx_atomic_compare_exchange_weak_explicit", "atomic_8h.html#ad7f32327ff66354cfa2f0cfdac79316f", null ], + [ "mlx_atomic_compare_exchange_weak_explicit", "atomic_8h.html#aa8f47b2e9b95d4b00ad51f08b070deb5", null ], + [ "mlx_atomic_fetch_add_explicit", "atomic_8h.html#aad448d9e06e001700b65ca8317216a3b", null ], + [ "mlx_atomic_fetch_and_explicit", "atomic_8h.html#a253e3c870c0ddc7c28ab2f6ca2c3eae5", null ], + [ "mlx_atomic_fetch_max_explicit", "atomic_8h.html#ac480f2b459a8ad9095cee353e152d00c", null ], + [ "mlx_atomic_fetch_max_explicit< float >", "atomic_8h.html#a1dce2abfa16417122c4d2bf261129ae4", null ], + [ "mlx_atomic_fetch_min_explicit", "atomic_8h.html#a2ec33dca0039bd944d73d1c2b378cc19", null ], + [ "mlx_atomic_fetch_min_explicit< float >", "atomic_8h.html#ab7d1dc49f319f239b7ee0b7c72976dd0", null ], + [ "mlx_atomic_fetch_mul_explicit", "atomic_8h.html#adfdbea60436f14f1af9ce36e2a0a77a3", null ], + [ "mlx_atomic_fetch_or_explicit", "atomic_8h.html#ab7391f197001471e4788312bdb6ab37a", null ], + [ "mlx_atomic_load_explicit", "atomic_8h.html#a253a4e8c2c5768a069e2791b627dfc99", null ], + [ "mlx_atomic_store_explicit", "atomic_8h.html#a0ae453140b0819a4c02f265334de98c0", null ], + [ "is_metal_atomic", "atomic_8h.html#a91a8bdcae647947a83c6689d7f252d24", null ] +]; \ No newline at end of file diff --git a/docs/build/html/atomic_8h_source.html b/docs/build/html/atomic_8h_source.html index a5c220e83..dc357bdef 100644 --- a/docs/build/html/atomic_8h_source.html +++ b/docs/build/html/atomic_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/atomic.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
atomic.h
@@ -99,7 +113,7 @@ $(function(){ initResizable(false); });
6#include <metal_stdlib>
7
8using namespace metal;
-
9
+
9
11// Atomic utils
13
14#pragma METAL internals : enable
@@ -121,11 +135,11 @@ $(function(){ initResizable(false); });
28
29template <typename T>
-
30struct mlx_atomic<T, enable_if_t<is_metal_atomic<T>>> {
-
31 atomic<T> val;
+
30struct mlx_atomic<T, enable_if_t<is_metal_atomic<T>>> {
+
31 atomic<T> val;
32};
-
33
+
33
35// Native metal atomics
37
38template <typename T, enable_if_t<is_metal_atomic<T>, bool> = true>
@@ -256,7 +270,7 @@ $(function(){ initResizable(false); });
142 }
143}
-
144
+
144
146// Custom atomics
148
149namespace {
@@ -267,14 +281,14 @@ $(function(){ initResizable(false); });
154template <typename T>
155union uint_or_packed {
156 T val[packing_size<T>];
-
157 uint bits;
+
157 uint bits;
158};
159
160template <typename T, typename Op>
161struct mlx_atomic_update_helper {
162 uint operator()(uint_or_packed<T> init, T update, size_t elem_offset) {
-
163 Op op;
-
164 init.val[elem_offset] = op(update, init.val[elem_offset]);
+
163 Op op;
+
164 init.val[elem_offset] = op(update, init.val[elem_offset]);
165 return init.bits;
166 }
167};
@@ -470,21 +484,22 @@ $(function(){ initResizable(false); });
METAL_FUNC void mlx_atomic_fetch_max_explicit(device mlx_atomic< T > *object, T val, size_t offset)
Definition atomic.h:75
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit(device mlx_atomic< T > *object, thread T *expected, T val, size_t offset)
Definition atomic.h:102
METAL_FUNC void mlx_atomic_fetch_mul_explicit(device mlx_atomic< T > *object, T val, size_t offset)
Definition atomic.h:91
-
Op op
Definition binary.h:129
array identity(int n, Dtype dtype, StreamOrDevice s={})
Create a square matrix of shape (n,n) of zeros, and ones in the major diagonal.
Definition bf16_math.h:226
METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
METAL_FUNC bfloat16_t max(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
Group init(bool strict=false)
Initialize the distributed backend and return the group containing all discoverable processes.
-
array bits(const std::vector< int > &shape, int width, const std::optional< array > &key=std::nullopt, StreamOrDevice s={})
Generate an array with type uint32 filled with random bits.
-
Definition atomic.h:25
atomic< uint > val
Definition atomic.h:26
+
- -
+ + diff --git a/docs/build/html/attn_2loader_8h.html b/docs/build/html/attn_2loader_8h.html index 882286aea..cb6b2a06a 100644 --- a/docs/build/html/attn_2loader_8h.html +++ b/docs/build/html/attn_2loader_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/loader.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -117,10 +131,13 @@ Namespaces  
- -
+ + diff --git a/docs/build/html/attn_2loader_8h.js b/docs/build/html/attn_2loader_8h.js new file mode 100644 index 000000000..a46dd5748 --- /dev/null +++ b/docs/build/html/attn_2loader_8h.js @@ -0,0 +1,7 @@ +var attn_2loader_8h = +[ + [ "mlx::steel::BlockLoader< T, BROWS, BCOLS, dst_ld, reduction_dim, tgp_size, alignment, n_reads, TCOLS, TROWS >", "structmlx_1_1steel_1_1_block_loader.html", "structmlx_1_1steel_1_1_block_loader" ], + [ "mlx::steel::BlockLoader< T, BROWS, BCOLS, dst_ld, reduction_dim, tgp_size, alignment, n_reads, TCOLS, TROWS >::ReadVector", "structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html", "structmlx_1_1steel_1_1_block_loader_1_1_read_vector" ], + [ "mlx::steel::CShape< R, C >", "structmlx_1_1steel_1_1_c_shape.html", "structmlx_1_1steel_1_1_c_shape" ], + [ "mlx::steel::BlockLoaderT< T, BROWS, BCOLS, kDstStrRow, kDstStrCol, reduction_dim, tgp_size, n_reads, TCOLS, TROWS >", "structmlx_1_1steel_1_1_block_loader_t.html", "structmlx_1_1steel_1_1_block_loader_t" ] +]; \ No newline at end of file diff --git a/docs/build/html/attn_2loader_8h_source.html b/docs/build/html/attn_2loader_8h_source.html index 311bc1556..e32e07887 100644 --- a/docs/build/html/attn_2loader_8h_source.html +++ b/docs/build/html/attn_2loader_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/loader.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
loader.h
@@ -96,11 +110,11 @@ $(function(){ initResizable(false); });
3#pragma once
4
-
6
+
6
8// Loading helper
10
11namespace mlx {
-
12namespace steel {
+
12namespace steel {
13
14template <
15 typename T,
@@ -113,7 +127,7 @@ $(function(){ initResizable(false); });
22 short n_reads = (BCOLS * BROWS) / (tgp_size),
23 short TCOLS = BCOLS / n_reads,
24 short TROWS = tgp_size / TCOLS>
-
25struct BlockLoader {
+
25struct BlockLoader {
26 STEEL_CONST short n_rows = (BROWS + TROWS - 1) / TROWS;
27 STEEL_CONST short vec_size = n_reads;
28
@@ -130,7 +144,7 @@ $(function(){ initResizable(false); });
39 threadgroup T* dst;
40 const device T* src;
41
-
42 struct alignas(alignment * sizeof(T)) ReadVector {
+
42 struct alignas(alignment * sizeof(T)) ReadVector {
43 uint8_t v[sizeof(T) * vec_size];
44 };
45
@@ -147,19 +161,19 @@ $(function(){ initResizable(false); });
55 thread_idx(simd_group_id * 32 + simd_lane_id),
56 bi(thread_idx / TCOLS),
57 bj(vec_size * (thread_idx % TCOLS)),
-
58 dst(dst_ + bi * dst_ld + bj),
+
58 dst(dst_ + bi * dst_ld + bj),
59 src(src_ + bi * src_ld + bj) {}
60
61 /* Apply operation to threadgroup without bound checking */
62 template <typename UnaryOp>
-
63 METAL_FUNC void apply_inplace_op(thread const UnaryOp& op) const {
+
63 METAL_FUNC void apply_inplace_op(thread const UnaryOp& op) const {
65 for (short i = 0; i < BROWS; i += TROWS) {
67 for (short j = 0; j < vec_size; j++) {
-
68 dst[i * dst_ld + j] = op.apply(dst[i * dst_ld + j]);
+
68 dst[i * dst_ld + j] = op.apply(dst[i * dst_ld + j]);
69 }
70 }
71 }
@@ -170,8 +184,8 @@ $(function(){ initResizable(false); });
74 METAL_FUNC void load_unsafe() const {
76 for (short i = 0; i < BROWS; i += TROWS) {
-
77 *((threadgroup ReadVector*)(&dst[i * dst_ld])) =
-
78 *((const device ReadVector*)(&src[i * src_ld]));
+
77 *((threadgroup ReadVector*)(&dst[i * dst_ld])) =
+
78 *((const device ReadVector*)(&src[i * src_ld]));
79 }
80 }
@@ -187,7 +201,7 @@ $(function(){ initResizable(false); });
89 for (short i = 0; i < BROWS; i += TROWS) {
91 for (short j = 0; j < vec_size; j++) {
-
92 dst[i * dst_ld + j] = T(0);
+
92 dst[i * dst_ld + j] = T(0);
93 }
94 }
95 return;
@@ -220,7 +234,7 @@ $(function(){ initResizable(false); });
122 // Copy values to threadgroup memory
124 for (short j = 0; j < vec_size; j++) {
-
125 dst[i * dst_ld + j] = tmp_val[j];
+
125 dst[i * dst_ld + j] = tmp_val[j];
126 }
127 }
128 }
@@ -254,7 +268,7 @@ $(function(){ initResizable(false); });
151 short TCOLS = BCOLS / n_reads,
152 short TROWS = tgp_size / TCOLS>
- +
154 STEEL_CONST short n_rows = (BROWS + TROWS - 1) / TROWS;
155 STEEL_CONST short vec_size = n_reads;
156
@@ -284,20 +298,20 @@ $(function(){ initResizable(false); });
179 thread_idx(simd_group_id * 32 + simd_lane_id),
180 bi(thread_idx / TCOLS),
181 bj(vec_size * (thread_idx % TCOLS)),
-
182 dst(dst_ + bi * kDstStrRow + bj * kDstStrCol),
+
182 dst(dst_ + bi * kDstStrRow + bj * kDstStrCol),
183 src(src_ + bi * src_ld + bj) {}
184
185 /* Apply operation to threadgroup without bound checking */
186 template <typename UnaryOp>
-
187 METAL_FUNC void apply_inplace_op(thread const UnaryOp& op) const {
+
187 METAL_FUNC void apply_inplace_op(thread const UnaryOp& op) const {
189 for (short i = 0; i < BROWS; i += TROWS) {
191 for (short j = 0; j < vec_size; j++) {
-
192 dst[i * kDstStrRow + j * kDstStrCol] =
-
193 op.apply(dst[i * kDstStrRow + j * kDstStrCol]);
+
192 dst[i * kDstStrRow + j * kDstStrCol] =
+
193 op.apply(dst[i * kDstStrRow + j * kDstStrCol]);
194 }
195 }
196 }
@@ -310,7 +324,7 @@ $(function(){ initResizable(false); });
201 for (short i = 0; i < BROWS; i += TROWS) {
203 for (short j = 0; j < vec_size; j++) {
-
204 dst[i * kDstStrRow + j * kDstStrCol] = src[i * src_ld + j];
+
204 dst[i * kDstStrRow + j * kDstStrCol] = src[i * src_ld + j];
205 }
206 }
207 }
@@ -327,7 +341,7 @@ $(function(){ initResizable(false); });
216 for (short i = 0; i < BROWS; i += TROWS) {
218 for (short j = 0; j < vec_size; j++) {
-
219 dst[i * kDstStrRow + j * kDstStrCol] = T(0);
+
219 dst[i * kDstStrRow + j * kDstStrCol] = T(0);
220 }
221 }
222 return;
@@ -360,7 +374,7 @@ $(function(){ initResizable(false); });
249 // Copy values to threadgroup memory
251 for (short j = 0; j < vec_size; j++) {
-
252 dst[i * kDstStrRow + j * kDstStrCol] = tmp_val[j];
+
252 dst[i * kDstStrRow + j * kDstStrCol] = tmp_val[j];
253 }
254 }
255 }
@@ -377,28 +391,27 @@ $(function(){ initResizable(false); });
262
263} // namespace steel
264} // namespace mlx
-
Op op
Definition binary.h:129
+
Definition attn.h:19
Definition allocator.h:7
#define STEEL_PRAGMA_UNROLL
Definition defines.h:4
#define STEEL_CONST
Definition defines.h:3
-
uint8_t v[sizeof(T) *vec_size]
Definition loader.h:43
-
const short thread_idx
Definition loader.h:34
+
Definition loader.h:25
+
METAL_FUNC BlockLoader(const device T *src_, const int src_ld_, threadgroup T *dst_, ushort simd_group_id, ushort simd_lane_id)
Definition loader.h:47
-
STEEL_CONST short vec_size
Definition loader.h:27
+
METAL_FUNC void next()
Definition loader.h:131
METAL_FUNC void load_unsafe() const
Definition loader.h:74
-
const short bj
Definition loader.h:36
-
STEEL_CONST short n_rows
Definition loader.h:26
-
const short bi
Definition loader.h:35
-
const int src_ld
Definition loader.h:30
-
const int tile_stride
Definition loader.h:31
+ + + + +
METAL_FUNC void load_safe(short2 src_tile_dim) const
Definition loader.h:83
-
const device T * src
Definition loader.h:40
+
METAL_FUNC void apply_inplace_op(thread const UnaryOp &op) const
Definition loader.h:63
-
threadgroup T * dst
Definition loader.h:39
-
Definition loader.h:153
+
METAL_FUNC BlockLoaderT(const device T *src_, const int src_ld_, threadgroup T *dst_, ushort simd_group_id, ushort simd_lane_id)
Definition loader.h:171
STEEL_CONST short n_rows
Definition loader.h:154
METAL_FUNC void apply_inplace_op(thread const UnaryOp &op) const
Definition loader.h:187
@@ -417,10 +430,13 @@ $(function(){ initResizable(false); });
STEEL_CONST int kCols
Definition loader.h:139
STEEL_CONST int kRows
Definition loader.h:138
- -
+ + diff --git a/docs/build/html/attn_2mma_8h.html b/docs/build/html/attn_2mma_8h.html index 9c7def403..df0162ba6 100644 --- a/docs/build/html/attn_2mma_8h.html +++ b/docs/build/html/attn_2mma_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/mma.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -112,7 +126,7 @@ Classes   struct  mlx::steel::BaseMMAFrag< T, kFragRows_, kFragCols_ >   -struct  mlx::steel::BaseMMAFrag< T, 8, 8 > +struct  mlx::steel::BaseMMAFrag< T, 8, 8 >   struct  mlx::steel::MMATile< T, kTileRows_, kTileCols_, MMAFrag_ >   @@ -128,15 +142,18 @@ Namespaces - +

Functions

template<typename T , typename U , int M, int N, int K>
template<typename T, typename U, int M, int N, int K>
METAL_FUNC void mlx::steel::tile_matmad (thread MMATile< T, M, N > &D, thread MMATile< U, M, K > &A, thread MMATile< U, K, N > &B, thread MMATile< T, M, N > &C)
 
- -
+ + diff --git a/docs/build/html/attn_2mma_8h.js b/docs/build/html/attn_2mma_8h.js new file mode 100644 index 000000000..e0f09a31b --- /dev/null +++ b/docs/build/html/attn_2mma_8h.js @@ -0,0 +1,10 @@ +var attn_2mma_8h = +[ + [ "mlx::steel::Shape2D< RInt, CInt >", "structmlx_1_1steel_1_1_shape2_d.html", "structmlx_1_1steel_1_1_shape2_d" ], + [ "mlx::steel::Layout2D< Shape, Layout >", "structmlx_1_1steel_1_1_layout2_d.html", "structmlx_1_1steel_1_1_layout2_d" ], + [ "mlx::steel::BaseMMAFrag< T, kFragRows_, kFragCols_ >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", null ], + [ "mlx::steel::BaseMMAFrag< T, 8, 8 >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", "structmlx_1_1steel_1_1_base_m_m_a_frag" ], + [ "mlx::steel::MMATile< T, kTileRows_, kTileCols_, MMAFrag_ >", "structmlx_1_1steel_1_1_m_m_a_tile.html", "structmlx_1_1steel_1_1_m_m_a_tile" ], + [ "mlx::steel::BlockMMA< T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, lda_tgp, ldb_tgp, AccumType, Epilogue >", "structmlx_1_1steel_1_1_block_m_m_a.html", "structmlx_1_1steel_1_1_block_m_m_a" ], + [ "mlx::steel::tile_matmad", "namespacemlx_1_1steel.html#ad583e6038efc119542410f43b603d4ad", null ] +]; \ No newline at end of file diff --git a/docs/build/html/attn_2mma_8h_source.html b/docs/build/html/attn_2mma_8h_source.html index 156ab79e8..69ee53e27 100644 --- a/docs/build/html/attn_2mma_8h_source.html +++ b/docs/build/html/attn_2mma_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/mma.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
mma.h
@@ -104,15 +118,15 @@ $(function(){ initResizable(false); });
12
13using namespace metal;
-
14
+
14
16// MMA helper
18
19namespace mlx {
-
20namespace steel {
+
20namespace steel {
21
22template <typename RInt, typename CInt>
-
23struct Shape2D {
+
23struct Shape2D {
24 RInt r;
25 CInt c;
26
@@ -140,25 +154,25 @@ $(function(){ initResizable(false); });
45
46template <typename T>
47struct BaseMMAFrag<T, 8, 8> {
-
48 STEEL_CONST int kFragRows = 8;
-
49 STEEL_CONST int kFragCols = 8;
+ +
50
-
51 STEEL_CONST int kElemsPerFrag = (kFragRows * kFragCols) / 32;
+
52
-
53 STEEL_CONST int kElemRows = 1;
-
54 STEEL_CONST int kElemCols = 2;
+ +
55
56 static_assert(
-
57 kElemRows * kElemCols == kElemsPerFrag,
+
58 "MMAFrag shape is not consistent with MMAFrag size");
59
-
60 typedef metal::simdgroup_matrix<T, kFragRows, kFragCols> mat_type;
-
61 typedef metal::vec<T, kElemsPerFrag> frag_type;
-
62 typedef metal::vec<T, kElemRows> row_frag_type;
-
63 typedef metal::vec<T, kElemCols> col_frag_type;
+
60 typedef metal::simdgroup_matrix<T, kFragRows, kFragCols> mat_type;
+
61 typedef metal::vec<T, kElemsPerFrag> frag_type;
+
62 typedef metal::vec<T, kElemRows> row_frag_type;
+
63 typedef metal::vec<T, kElemCols> col_frag_type;
64
-
65 METAL_FUNC static constexpr short2 get_coord(ushort simd_lane_id
+
65 METAL_FUNC static constexpr short2 get_coord(ushort simd_lane_id
66 [[thread_index_in_simdgroup]]) {
67 const short qid = simd_lane_id / 4;
68 const short fm = (qid & 4) + ((simd_lane_id / 2) % 4);
@@ -170,12 +184,12 @@ $(function(){ initResizable(false); });
73 template <typename SrcPtrType, typename StrX, typename StrY>
74 METAL_FUNC static constexpr void
-
75 load(thread frag_type& dst, SrcPtrType src, StrX str_x, StrY str_y) {
+
75 load(thread frag_type& dst, SrcPtrType src, StrX str_x, StrY str_y) {
-
77 for (short i = 0; i < kElemRows; i++) {
+
77 for (short i = 0; i < kElemRows; i++) {
-
79 for (short j = 0; j < kElemCols; j++) {
-
80 dst[i * kElemCols + j] = static_cast<T>(src[i * str_x + j * str_y]);
+
79 for (short j = 0; j < kElemCols; j++) {
+
80 dst[i * kElemCols + j] = static_cast<T>(src[i * str_x + j * str_y]);
81 }
82 }
83 }
@@ -190,15 +204,15 @@ $(function(){ initResizable(false); });
91 typename OffX,
92 typename OffY>
-
93 METAL_FUNC static constexpr void load_safe(
-
94 thread frag_type& dst,
+
93 METAL_FUNC static constexpr void load_safe(
+
94 thread frag_type& dst,
95 SrcPtrType src,
96 StrX str_x,
97 StrY str_y,
98 LimX lim_x,
99 LimY lim_y,
-
100 OffX off_x = Int<0>{},
-
101 OffY off_y = Int<0>{}) {
+
100 OffX off_x = Int<0>{},
+
101 OffY off_y = Int<0>{}) {
103 for (short i = 0; i < kElemRows; i++) {
@@ -217,14 +231,14 @@ $(function(){ initResizable(false); });
116 template <typename DstPtrType, typename StrX, typename StrY>
117 METAL_FUNC static constexpr void
-
118 store(const thread frag_type& src, DstPtrType dst, StrX str_x, StrY str_y) {
+
118 store(const thread frag_type& src, DstPtrType dst, StrX str_x, StrY str_y) {
120
-
122 for (short i = 0; i < kElemRows; i++) {
+
122 for (short i = 0; i < kElemRows; i++) {
-
124 for (short j = 0; j < kElemCols; j++) {
-
125 dst[i * str_x + j * str_y] = static_cast<U>(src[i * kElemCols + j]);
+
124 for (short j = 0; j < kElemCols; j++) {
+
125 dst[i * str_x + j * str_y] = static_cast<U>(src[i * kElemCols + j]);
126 }
127 }
128 }
@@ -239,15 +253,15 @@ $(function(){ initResizable(false); });
136 typename OffX,
137 typename OffY>
-
138 METAL_FUNC static constexpr void store_safe(
-
139 const thread frag_type& src,
+
138 METAL_FUNC static constexpr void store_safe(
+
139 const thread frag_type& src,
140 DstPtrType dst,
141 StrX str_x,
142 StrY str_y,
143 LimX lim_x,
144 LimY lim_y,
-
145 OffX off_x = Int<0>{},
-
146 OffY off_y = Int<0>{}) {
+
145 OffX off_x = Int<0>{},
+
146 OffY off_y = Int<0>{}) {
148
@@ -264,40 +278,40 @@ $(function(){ initResizable(false); });
160
-
161 METAL_FUNC static constexpr void mma(
-
162 thread frag_type& D,
-
163 thread frag_type& A,
-
164 thread frag_type& B,
-
165 thread frag_type& C) {
-
166 mat_type D_mat;
-
167 mat_type A_mat;
-
168 mat_type B_mat;
-
169 mat_type C_mat;
+
161 METAL_FUNC static constexpr void mma(
+
162 thread frag_type& D,
+
163 thread frag_type& A,
+
164 thread frag_type& B,
+
165 thread frag_type& C) {
+
166 mat_type D_mat;
+
167 mat_type A_mat;
+
168 mat_type B_mat;
+
169 mat_type C_mat;
170
-
171 reinterpret_cast<thread frag_type&>(A_mat.thread_elements()) = A;
-
172 reinterpret_cast<thread frag_type&>(B_mat.thread_elements()) = B;
-
173 reinterpret_cast<thread frag_type&>(C_mat.thread_elements()) = C;
+
171 reinterpret_cast<thread frag_type&>(A_mat.thread_elements()) = A;
+
172 reinterpret_cast<thread frag_type&>(B_mat.thread_elements()) = B;
+
173 reinterpret_cast<thread frag_type&>(C_mat.thread_elements()) = C;
174
-
175 mma(D_mat, A_mat, B_mat, C_mat);
+
175 mma(D_mat, A_mat, B_mat, C_mat);
176
-
177 D = reinterpret_cast<thread frag_type&>(D_mat.thread_elements());
+
177 D = reinterpret_cast<thread frag_type&>(D_mat.thread_elements());
178 }
179
-
180 METAL_FUNC static constexpr void mma(
-
181 thread mat_type& D,
-
182 thread mat_type& A,
-
183 thread mat_type& B,
-
184 thread mat_type& C) {
+
180 METAL_FUNC static constexpr void mma(
+
181 thread mat_type& D,
+
182 thread mat_type& A,
+
183 thread mat_type& B,
+
184 thread mat_type& C) {
185 simdgroup_multiply_accumulate(D, A, B, C);
186 }
187
188 template <typename Op>
-
189 METAL_FUNC static constexpr void row_reduce(
-
190 thread const frag_type& inp_vals,
+
189 METAL_FUNC static constexpr void row_reduce(
+
190 thread const frag_type& inp_vals,
191 thread T* reduced_vals) {
192 T thr_reduce = Op::apply(inp_vals.x, inp_vals.y);
193
@@ -313,15 +327,15 @@ $(function(){ initResizable(false); });
202
203 template <typename Op>
-
204 METAL_FUNC static constexpr void row_bin_op(
-
205 thread frag_type& inp_vals,
+
204 METAL_FUNC static constexpr void row_bin_op(
+
205 thread frag_type& inp_vals,
206 thread T* row_vals) {
-
208 for (short i = 0; i < kElemRows; i++) {
+
208 for (short i = 0; i < kElemRows; i++) {
-
210 for (short j = 0; j < kElemCols; j++) {
-
211 inp_vals[i * kElemCols + j] =
-
212 Op::apply(inp_vals[i * kElemCols + j], row_vals[i]);
+
210 for (short j = 0; j < kElemCols; j++) {
+
211 inp_vals[i * kElemCols + j] =
+
212 Op::apply(inp_vals[i * kElemCols + j], row_vals[i]);
213 }
214 }
215 }
@@ -334,8 +348,8 @@ $(function(){ initResizable(false); });
221 int kTileCols_,
222 class MMAFrag_ = BaseMMAFrag<T, 8, 8>>
223struct MMATile {
-
224 using MMAFrag_t = MMAFrag_;
-
225 using elem_type = T;
+
224 using MMAFrag_t = MMAFrag_;
+
225 using elem_type = T;
226 STEEL_CONST int kFragRows = MMAFrag_t::kFragRows;
227 STEEL_CONST int kFragCols = MMAFrag_t::kFragCols;
228 STEEL_CONST int kElemsPerFrag = MMAFrag_t::kElemsPerFrag;
@@ -394,14 +408,14 @@ $(function(){ initResizable(false); });
274
-
275 METAL_FUNC thread elem_type* elems() {
-
276 return reinterpret_cast<thread elem_type*>(val_frags);
+
275 METAL_FUNC thread elem_type* elems() {
+
276 return reinterpret_cast<thread elem_type*>(val_frags);
277 }
278
-
279 METAL_FUNC const thread elem_type* elems() const {
-
280 return reinterpret_cast<const thread elem_type*>(val_frags);
+
279 METAL_FUNC const thread elem_type* elems() const {
+
280 return reinterpret_cast<const thread elem_type*>(val_frags);
281 }
282
@@ -445,8 +459,8 @@ $(function(){ initResizable(false); });
315 &(
316 src[(i * kFragRows) * w_x * str_x +
317 (j * kFragCols) * w_y * str_y]),
-
318 Int<str_x>{},
-
319 Int<str_y>{});
+
318 Int<str_x>{},
+
319 Int<str_y>{});
320 }
321 }
322 }
@@ -464,8 +478,8 @@ $(function(){ initResizable(false); });
332 &(
333 dst[(i * kFragRows) * w_x * str_x +
334 (j * kFragCols) * w_y * str_y]),
-
335 Int<str_x>{},
-
336 Int<str_y>{});
+
335 Int<str_x>{},
+
336 Int<str_y>{});
337 }
338 }
339 }
@@ -482,7 +496,7 @@ $(function(){ initResizable(false); });
348 frag_at(i, j),
349 &(src[(i * kFragRows) * w_x * ld + (j * kFragCols) * w_y]),
350 ld,
-
351 Int<1>{});
+
351 Int<1>{});
352 }
353 }
354 }
@@ -499,7 +513,7 @@ $(function(){ initResizable(false); });
363 frag_at(i, j),
364 &(dst[(i * kFragRows) * w_x * ld + (j * kFragCols) * w_y]),
365 ld,
-
366 Int<1>{});
+
366 Int<1>{});
367 }
368 }
369 }
@@ -517,7 +531,7 @@ $(function(){ initResizable(false); });
379 frag_at(i, j),
380 src,
381 ld,
-
382 Int<1>{},
+
382 Int<1>{},
383 src_tile_dims.y,
384 src_tile_dims.x,
385 (i * kFragRows) * w_x,
@@ -539,7 +553,7 @@ $(function(){ initResizable(false); });
399 frag_at(i, j),
400 dst,
401 ld,
-
402 Int<1>{},
+
402 Int<1>{},
403 dst_tile_dims.y,
404 dst_tile_dims.x,
405 (i * kFragRows) * w_x,
@@ -592,7 +606,7 @@ $(function(){ initResizable(false); });
449struct BlockMMA {
450 // MMAFrag size
- +
453
454 // Warp tile simdgroup matrix strides along M
@@ -890,51 +904,59 @@ $(function(){ initResizable(false); });
Definition bf16_math.h:226
METAL_FUNC bfloat16_t simd_shuffle_xor(bfloat16_t data, ushort mask)
Definition bf16_math.h:377
typename pointer_element< remove_cv_t< T > >::type pointer_element_t
Definition type_traits.h:51
+
Definition attn.h:19
METAL_FUNC void tile_matmad(thread MMATile< T, M, N > &D, thread MMATile< U, M, K > &A, thread MMATile< U, K, N > &B, thread MMATile< T, M, N > &C)
Definition mma.h:413
+
integral_constant< int, val > Int
Definition integral_constant.h:48
Definition allocator.h:7
#define STEEL_PRAGMA_UNROLL
Definition defines.h:4
#define STEEL_CONST
Definition defines.h:3
-
static METAL_FUNC constexpr void mma(thread mat_type &D, thread mat_type &A, thread mat_type &B, thread mat_type &C)
Definition mma.h:180
-
static METAL_FUNC constexpr void store_safe(const thread frag_type &src, DstPtrType dst, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int< 0 >{}, OffY off_y=Int< 0 >{})
Definition mma.h:138
-
static METAL_FUNC constexpr void row_bin_op(thread frag_type &inp_vals, thread T *row_vals)
Definition mma.h:204
-
static METAL_FUNC constexpr void row_reduce(thread const frag_type &inp_vals, thread T *reduced_vals)
Definition mma.h:189
-
metal::vec< T, kElemRows > row_frag_type
Definition mma.h:62
-
static METAL_FUNC constexpr short2 get_coord(ushort simd_lane_id)
Definition mma.h:65
-
static METAL_FUNC constexpr void mma(thread frag_type &D, thread frag_type &A, thread frag_type &B, thread frag_type &C)
Definition mma.h:161
-
metal::simdgroup_matrix< T, kFragRows, kFragCols > mat_type
Definition mma.h:60
-
metal::vec< T, kElemsPerFrag > frag_type
Definition mma.h:61
-
static METAL_FUNC constexpr void store(const thread frag_type &src, DstPtrType dst, StrX str_x, StrY str_y)
Definition mma.h:118
-
metal::vec< T, kElemCols > col_frag_type
Definition mma.h:63
-
static METAL_FUNC constexpr void load(thread frag_type &dst, SrcPtrType src, StrX str_x, StrY str_y)
Definition mma.h:75
-
static METAL_FUNC constexpr void load_safe(thread frag_type &dst, SrcPtrType src, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int< 0 >{}, OffY off_y=Int< 0 >{})
Definition mma.h:93
Definition mma.h:23
+
static METAL_FUNC constexpr void mma(thread mat_type &D, thread mat_type &A, thread mat_type &B, thread mat_type &C)
Definition mma.h:180
+
static METAL_FUNC constexpr void store_safe(const thread frag_type &src, DstPtrType dst, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int< 0 >{}, OffY off_y=Int< 0 >{})
Definition mma.h:138
+
STEEL_CONST int kFragCols
Definition mma.h:49
+
metal::simdgroup_matrix< T, kFragRows, kFragCols > mat_type
Definition mma.h:60
+
STEEL_CONST int kFragRows
Definition mma.h:48
+
static METAL_FUNC constexpr void row_bin_op(thread frag_type &inp_vals, thread T *row_vals)
Definition mma.h:204
+
STEEL_CONST int kElemsPerFrag
Definition mma.h:51
+
metal::vec< T, kElemRows > row_frag_type
Definition mma.h:62
+
static METAL_FUNC constexpr void row_reduce(thread const frag_type &inp_vals, thread T *reduced_vals)
Definition mma.h:189
+
static METAL_FUNC constexpr short2 get_coord(ushort simd_lane_id)
Definition mma.h:65
+
STEEL_CONST int kElemRows
Definition mma.h:53
+
STEEL_CONST int kElemCols
Definition mma.h:54
+
static METAL_FUNC constexpr void mma(thread frag_type &D, thread frag_type &A, thread frag_type &B, thread frag_type &C)
Definition mma.h:161
+
metal::vec< T, kElemsPerFrag > frag_type
Definition mma.h:61
+
static METAL_FUNC constexpr void store(const thread frag_type &src, DstPtrType dst, StrX str_x, StrY str_y)
Definition mma.h:118
+
static METAL_FUNC constexpr void load(thread frag_type &dst, SrcPtrType src, StrX str_x, StrY str_y)
Definition mma.h:75
+
static METAL_FUNC constexpr void load_safe(thread frag_type &dst, SrcPtrType src, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int< 0 >{}, OffY off_y=Int< 0 >{})
Definition mma.h:93
+
metal::vec< T, kElemCols > col_frag_type
Definition mma.h:63
METAL_FUNC void store_result(device U *D, const int ldd)
Definition mma.h:536
METAL_FUNC void store_result_safe(device U *D, const int ldd, short2 dst_tile_dims)
Definition mma.h:550
-
short As_offset
Definition mma.h:485
-
MMATile< AccumType, TM, TN, MMAFrag_acc_t > Ctile
Definition mma.h:479
-
STEEL_CONST short A_str_k
Definition mma.h:466
-
MMATile< AccumType, 1, TN, MMAFrag_acc_t > Btile
Definition mma.h:478
-
MMATile< AccumType, TM, 1, MMAFrag_acc_t > Atile
Definition mma.h:477
-
STEEL_CONST short B_str_n
Definition mma.h:470
-
STEEL_CONST short TM_stride
Definition mma.h:455
+ + + + + + +
METAL_FUNC void mma(const threadgroup T *As, const threadgroup T *Bs)
Definition mma.h:509
-
STEEL_CONST short TN
Definition mma.h:462
+
METAL_FUNC void store_result_safe(device U *D, const int ldd, const device U *C, const int ldc, const int fdc, short2 dst_tile_dims, thread const Epilogue &epilogue_op) const
Definition mma.h:683
METAL_FUNC void store_result(device U *D, const int ldd, const device U *C, const int ldc, const int fdc, thread const Epilogue &epilogue_op) const
Definition mma.h:651
METAL_FUNC void apply_epilogue(const device U *C, const int ldc, const int fdc, thread const BinaryEpilogue &epilogue_op)
Definition mma.h:579
-
STEEL_CONST short TN_stride
Definition mma.h:457
-
STEEL_CONST short tile_stride_a
Definition mma.h:473
-
short Bs_offset
Definition mma.h:486
+ + +
METAL_FUNC void apply_epilogue_safe(const device U *C, const int ldc, const int fdc, short2 dst_tile_dims, thread const BinaryEpilogue &epilogue_op)
Definition mma.h:607
METAL_FUNC BlockMMA(ushort simd_group_id, ushort simd_lane_id)
Definition mma.h:489
-
STEEL_CONST short B_str_k
Definition mma.h:469
-
short sm
Definition mma.h:482
-
STEEL_CONST short A_str_m
Definition mma.h:465
-
STEEL_CONST short TM
Definition mma.h:460
-
short sn
Definition mma.h:483
-
STEEL_CONST short tile_stride_b
Definition mma.h:474
-
STEEL_CONST short kFragSize
Definition mma.h:451
+ + + + + + + +
METAL_FUNC void apply_epilogue(thread const UnaryEpilogue &epilogue_op)
Definition mma.h:569
Definition mma.h:31
Shape shape
Definition mma.h:32
@@ -953,9 +975,8 @@ $(function(){ initResizable(false); });
STEEL_CONST int kRowsPerThread
Definition mma.h:239
STEEL_CONST int kRows
Definition mma.h:233
frag_type val_frags[kNumFrags]
Definition mma.h:245
-
MMAFrag_ MMAFrag_t
Definition mma.h:224
METAL_FUNC void store(device U *dst, const int ld) const
Definition mma.h:357
-
T elem_type
Definition mma.h:225
+
T elem_type
Definition mma.h:225
METAL_FUNC thread elem_type * elems()
Definition mma.h:275
STEEL_CONST int kCols
Definition mma.h:234
STEEL_CONST int kElemsPerTile
Definition mma.h:237
@@ -966,21 +987,23 @@ $(function(){ initResizable(false); });
METAL_FUNC constexpr void clear()
Definition mma.h:249
METAL_FUNC void load(const device U *src, const int ld)
Definition mma.h:342
MMAFrag_t::frag_type frag_type
Definition mma.h:243
+
MMAFrag_ MMAFrag_t
Definition mma.h:224
STEEL_CONST int kFragCols
Definition mma.h:227
METAL_FUNC constexpr const thread frag_type & frag_at(const short i, const short j) const
Definition mma.h:260
METAL_FUNC const thread elem_type * elems() const
Definition mma.h:279
STEEL_CONST int kNumFrags
Definition mma.h:236
STEEL_CONST int kElemsPerFrag
Definition mma.h:228
-
Definition mma.h:23
Shape2D(RInt r_, CInt c_)
Definition mma.h:27
RInt r
Definition mma.h:24
CInt c
Definition mma.h:25
-
Definition integral_constant.h:18
- -
+ + diff --git a/docs/build/html/attn_2params_8h.html b/docs/build/html/attn_2params_8h.html index e7fe51aab..9aca50835 100644 --- a/docs/build/html/attn_2params_8h.html +++ b/docs/build/html/attn_2params_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/params.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -110,10 +124,13 @@ Namespaces  
- -
+ + diff --git a/docs/build/html/attn_2params_8h.js b/docs/build/html/attn_2params_8h.js new file mode 100644 index 000000000..f9f62aac2 --- /dev/null +++ b/docs/build/html/attn_2params_8h.js @@ -0,0 +1,4 @@ +var attn_2params_8h = +[ + [ "mlx::steel::AttnParams", "structmlx_1_1steel_1_1_attn_params.html", "structmlx_1_1steel_1_1_attn_params" ] +]; \ No newline at end of file diff --git a/docs/build/html/attn_2params_8h_source.html b/docs/build/html/attn_2params_8h_source.html index b7657a3ee..4c75cbba8 100644 --- a/docs/build/html/attn_2params_8h_source.html +++ b/docs/build/html/attn_2params_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/params.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
params.h
@@ -94,11 +108,11 @@ $(function(){ initResizable(false); }); Go to the documentation of this file.
1// Copyright © 2024 Apple Inc.
2
3#pragma once
-
4
+
4
6// Attn param classes
8
9namespace mlx {
-
10namespace steel {
+
10namespace steel {
11
12struct AttnParams {
@@ -118,21 +132,20 @@ $(function(){ initResizable(false); });
28
-
29 size_t Q_strides[3];
-
30 size_t K_strides[3];
-
31 size_t V_strides[3];
-
32 size_t O_strides[3];
+
29 int64_t Q_strides[3];
+
30 int64_t K_strides[3];
+
31 int64_t V_strides[3];
+
32 int64_t O_strides[3];
33};
34
35} // namespace steel
36} // namespace mlx
+
Definition attn.h:19
Definition allocator.h:7
Definition params.h:12
-
size_t K_strides[3]
Key strides (B, H, L, D = 1)
Definition params.h:30
int D
Head Dim.
Definition params.h:15
int B
Batch Size.
Definition params.h:13
-
size_t O_strides[3]
Output strides (B, H, L, D = 1)
Definition params.h:32
int gqa_factor
Group Query factor.
Definition params.h:20
int H
Heads.
Definition params.h:14
int NQ
Number of query blocks.
Definition params.h:23
@@ -140,15 +153,20 @@ $(function(){ initResizable(false); });
int NQ_aligned
Number of full query blocks.
Definition params.h:26
int qL
Query Sequence Length.
Definition params.h:17
int NK
Number of key/value blocks.
Definition params.h:24
-
size_t Q_strides[3]
Query strides (B, H, L, D = 1)
Definition params.h:29
+
int64_t Q_strides[3]
Query strides (B, H, L, D = 1)
Definition params.h:29
int NK_aligned
Number of full key/value blocks.
Definition params.h:27
-
size_t V_strides[3]
Value strides (B, H, L, D = 1)
Definition params.h:31
+
int64_t O_strides[3]
Output strides (B, H, L, D = 1)
Definition params.h:32
+
int64_t V_strides[3]
Value strides (B, H, L, D = 1)
Definition params.h:31
float scale
Attention scale.
Definition params.h:21
+
int64_t K_strides[3]
Key strides (B, H, L, D = 1)
Definition params.h:30
- -
+ + diff --git a/docs/build/html/attn_8h.html b/docs/build/html/attn_8h.html index e7a1ad19a..2e7da7753 100644 --- a/docs/build/html/attn_8h.html +++ b/docs/build/html/attn_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/attn.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -118,10 +132,13 @@ Namespaces  
- -
+ + diff --git a/docs/build/html/attn_8h.js b/docs/build/html/attn_8h.js new file mode 100644 index 000000000..1cf2805bd --- /dev/null +++ b/docs/build/html/attn_8h.js @@ -0,0 +1,5 @@ +var attn_8h = +[ + [ "mlx::steel::LoopAlignment< M_aligned, N_aligned, K_aligned >", "structmlx_1_1steel_1_1_loop_alignment.html", null ], + [ "mlx::steel::GEMMKernel< T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, MN_aligned, K_aligned, AccumType, Epilogue >", "structmlx_1_1steel_1_1_g_e_m_m_kernel.html", "structmlx_1_1steel_1_1_g_e_m_m_kernel" ] +]; \ No newline at end of file diff --git a/docs/build/html/attn_8h_source.html b/docs/build/html/attn_8h_source.html index c8e033f33..d3bd01048 100644 --- a/docs/build/html/attn_8h_source.html +++ b/docs/build/html/attn_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/attn.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
attn.h
@@ -103,12 +117,12 @@ $(function(){ initResizable(false); });
11
12using namespace metal;
-
13
+
13
15// GEMM kernel class
17
18namespace mlx {
-
19namespace steel {
+
19namespace steel {
20
21template <bool M_aligned, bool N_aligned, bool K_aligned>
22struct LoopAlignment {};
@@ -138,21 +152,21 @@ $(function(){ initResizable(false); });
46
47 STEEL_CONST short tgp_size = WM * WN * 32;
48
- +
50 T,
51 transpose_a ? BK : BM,
52 transpose_a ? BM : BK,
53 transpose_a ? BM + tgp_padding_a : BK + tgp_padding_a,
54 !transpose_a,
55 tgp_size>;
- +
57 T,
58 transpose_b ? BN : BK,
59 transpose_b ? BK : BN,
60 transpose_b ? BK + tgp_padding_b : BN + tgp_padding_b,
61 transpose_b,
62 tgp_size>;
-
63 using mma_t = BlockMMA<
+
63 using mma_t = BlockMMA<
64 T,
65 U,
66 BM,
@@ -174,9 +188,9 @@ $(function(){ initResizable(false); });
81 threadgroup T* As [[threadgroup(0)]],
82 threadgroup T* Bs [[threadgroup(1)]],
83 const int gemm_k_iterations,
-
84 thread loader_a_t& loader_a,
-
85 thread loader_b_t& loader_b,
-
86 thread mma_t& mma_op,
+
84 thread loader_a_t& loader_a,
+
85 thread loader_b_t& loader_b,
+
86 thread mma_t& mma_op,
87 thread const short& tgp_bm,
88 thread const short& tgp_bn,
89 thread const short& lbk,
@@ -268,14 +282,14 @@ $(function(){ initResizable(false); });
173 D += c_row_long * params->ldd + c_col_long;
174
175 // Prepare threadgroup loading operations
-
176 thread loader_a_t loader_a(A, params->lda, As, simd_group_id, simd_lane_id);
-
177 thread loader_b_t loader_b(B, params->ldb, Bs, simd_group_id, simd_lane_id);
+
176 thread loader_a_t loader_a(A, params->lda, As, simd_group_id, simd_lane_id);
+
177 thread loader_b_t loader_b(B, params->ldb, Bs, simd_group_id, simd_lane_id);
178
179 // Prepare threadgroup mma operation
-
180 thread mma_t mma_op(simd_group_id, simd_lane_id);
+
180 thread mma_t mma_op(simd_group_id, simd_lane_id);
181
182 int gemm_k_iterations = params->gemm_k_iterations_aligned;
-
183
+
183
185 // MNK aligned loop
186 if (MN_aligned) {
187 for (int k = 0; k < gemm_k_iterations; k++) {
@@ -397,6 +411,7 @@ $(function(){ initResizable(false); });
Definition bf16_math.h:226
METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
+
Definition attn.h:19
Definition allocator.h:7
#define STEEL_CONST
Definition defines.h:3
float accum_type
Definition transforms.h:57
@@ -408,17 +423,23 @@ $(function(){ initResizable(false); });
STEEL_CONST short tgp_mem_size
Definition attn.h:45
static METAL_FUNC void gemm_loop(threadgroup T *As, threadgroup T *Bs, const int gemm_k_iterations, thread loader_a_t &loader_a, thread loader_b_t &loader_b, thread mma_t &mma_op, thread const short &tgp_bm, thread const short &tgp_bn, thread const short &lbk, LoopAlignment< M_aligned, N_aligned, K_aligned_ > l={})
Definition attn.h:80
STEEL_CONST short tgp_size
Definition attn.h:47
+
BlockLoader< T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size > loader_a_t
Definition attn.h:49
+
BlockLoader< T, transpose_b ? BN :BK, transpose_b ? BK :BN, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, transpose_b, tgp_size > loader_b_t
Definition attn.h:56
STEEL_CONST short tgp_mem_size_a
Definition attn.h:41
STEEL_CONST short tgp_padding_b
Definition attn.h:40
STEEL_CONST short tgp_padding_a
Definition attn.h:39
+
BlockMMA< T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue > mma_t
Definition attn.h:63
Definition params.h:12
Definition gemm.h:21
Definition transforms.h:15
- -
+ + diff --git a/docs/build/html/backend_2accelerate_2utils_8h.html b/docs/build/html/backend_2accelerate_2utils_8h.html index acc935f75..16c2725d9 100644 --- a/docs/build/html/backend_2accelerate_2utils_8h.html +++ b/docs/build/html/backend_2accelerate_2utils_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/accelerate/utils.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Namespaces | @@ -112,10 +126,13 @@ Functions  
- -
+ + diff --git a/docs/build/html/backend_2accelerate_2utils_8h.js b/docs/build/html/backend_2accelerate_2utils_8h.js new file mode 100644 index 000000000..851b05f8d --- /dev/null +++ b/docs/build/html/backend_2accelerate_2utils_8h.js @@ -0,0 +1,4 @@ +var backend_2accelerate_2utils_8h = +[ + [ "mlx::core::to_bnns_dtype", "namespacemlx_1_1core.html#a7a4193f37b1de9c33c31d1da09c77edb", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2accelerate_2utils_8h_source.html b/docs/build/html/backend_2accelerate_2utils_8h_source.html index a244f91a9..5194315c1 100644 --- a/docs/build/html/backend_2accelerate_2utils_8h_source.html +++ b/docs/build/html/backend_2accelerate_2utils_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/accelerate/utils.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
utils.h
@@ -127,17 +141,20 @@ $(function(){ initResizable(false); });
Dtype::Kind kindof(const Dtype &t)
uint8_t size_of(const Dtype &t)
Definition dtype.h:102
Definition dtype.h:13
- - - - - - +
@ c
Definition dtype.h:35
+
@ V
Definition dtype.h:36
+
@ u
Definition dtype.h:32
+
@ i
Definition dtype.h:33
+
@ f
Definition dtype.h:34
+
@ b
Definition dtype.h:31
- -
+ + diff --git a/docs/build/html/backend_2common_2load_8h.html b/docs/build/html/backend_2common_2load_8h.html index 58a9183fb..78fedd71a 100644 --- a/docs/build/html/backend_2common_2load_8h.html +++ b/docs/build/html/backend_2common_2load_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/load.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Namespaces | @@ -112,10 +126,13 @@ Functions  
- -
+ + diff --git a/docs/build/html/backend_2common_2load_8h.js b/docs/build/html/backend_2common_2load_8h.js new file mode 100644 index 000000000..452297e46 --- /dev/null +++ b/docs/build/html/backend_2common_2load_8h.js @@ -0,0 +1,4 @@ +var backend_2common_2load_8h = +[ + [ "mlx::core::load", "namespacemlx_1_1core.html#a954de19249da7c1fa39b89bdc47368aa", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2common_2load_8h_source.html b/docs/build/html/backend_2common_2load_8h_source.html index b21cc0b6a..f45bf50f2 100644 --- a/docs/build/html/backend_2common_2load_8h_source.html +++ b/docs/build/html/backend_2common_2load_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/load.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
load.h
@@ -106,15 +120,18 @@ $(function(){ initResizable(false); });
13
14} // namespace mlx::core
-
Definition array.h:23
+
Definition array.h:24
Definition allocator.h:7
void load(array &out, size_t offset, const std::shared_ptr< io::Reader > &reader, bool swap_endianess)
- -
+ + diff --git a/docs/build/html/backend_2common_2ops_8h.html b/docs/build/html/backend_2common_2ops_8h.html index fdaf270c9..fbd4e3758 100644 --- a/docs/build/html/backend_2common_2ops_8h.html +++ b/docs/build/html/backend_2common_2ops_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/ops.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -243,10 +257,13 @@ Functions  
- -
+ + diff --git a/docs/build/html/backend_2common_2ops_8h.js b/docs/build/html/backend_2common_2ops_8h.js new file mode 100644 index 000000000..ce72fbd73 --- /dev/null +++ b/docs/build/html/backend_2common_2ops_8h.js @@ -0,0 +1,66 @@ +var backend_2common_2ops_8h = +[ + [ "mlx::core::detail::IntOrFloat", "unionmlx_1_1core_1_1detail_1_1_int_or_float.html", "unionmlx_1_1core_1_1detail_1_1_int_or_float" ], + [ "mlx::core::detail::Abs", "structmlx_1_1core_1_1detail_1_1_abs.html", "structmlx_1_1core_1_1detail_1_1_abs" ], + [ "mlx::core::detail::ArcCos", "structmlx_1_1core_1_1detail_1_1_arc_cos.html", "structmlx_1_1core_1_1detail_1_1_arc_cos" ], + [ "mlx::core::detail::ArcCosh", "structmlx_1_1core_1_1detail_1_1_arc_cosh.html", "structmlx_1_1core_1_1detail_1_1_arc_cosh" ], + [ "mlx::core::detail::ArcSin", "structmlx_1_1core_1_1detail_1_1_arc_sin.html", "structmlx_1_1core_1_1detail_1_1_arc_sin" ], + [ "mlx::core::detail::ArcSinh", "structmlx_1_1core_1_1detail_1_1_arc_sinh.html", "structmlx_1_1core_1_1detail_1_1_arc_sinh" ], + [ "mlx::core::detail::ArcTan", "structmlx_1_1core_1_1detail_1_1_arc_tan.html", "structmlx_1_1core_1_1detail_1_1_arc_tan" ], + [ "mlx::core::detail::ArcTan2", "structmlx_1_1core_1_1detail_1_1_arc_tan2.html", "structmlx_1_1core_1_1detail_1_1_arc_tan2" ], + [ "mlx::core::detail::ArcTanh", "structmlx_1_1core_1_1detail_1_1_arc_tanh.html", "structmlx_1_1core_1_1detail_1_1_arc_tanh" ], + [ "mlx::core::detail::Ceil", "structmlx_1_1core_1_1detail_1_1_ceil.html", "structmlx_1_1core_1_1detail_1_1_ceil" ], + [ "mlx::core::detail::Conjugate", "structmlx_1_1core_1_1detail_1_1_conjugate.html", "structmlx_1_1core_1_1detail_1_1_conjugate" ], + [ "mlx::core::detail::Cos", "structmlx_1_1core_1_1detail_1_1_cos.html", "structmlx_1_1core_1_1detail_1_1_cos" ], + [ "mlx::core::detail::Cosh", "structmlx_1_1core_1_1detail_1_1_cosh.html", "structmlx_1_1core_1_1detail_1_1_cosh" ], + [ "mlx::core::detail::Erf", "structmlx_1_1core_1_1detail_1_1_erf.html", "structmlx_1_1core_1_1detail_1_1_erf" ], + [ "mlx::core::detail::ErfInv", "structmlx_1_1core_1_1detail_1_1_erf_inv.html", "structmlx_1_1core_1_1detail_1_1_erf_inv" ], + [ "mlx::core::detail::Exp", "structmlx_1_1core_1_1detail_1_1_exp.html", "structmlx_1_1core_1_1detail_1_1_exp" ], + [ "mlx::core::detail::Expm1", "structmlx_1_1core_1_1detail_1_1_expm1.html", "structmlx_1_1core_1_1detail_1_1_expm1" ], + [ "mlx::core::detail::Floor", "structmlx_1_1core_1_1detail_1_1_floor.html", "structmlx_1_1core_1_1detail_1_1_floor" ], + [ "mlx::core::detail::Imag", "structmlx_1_1core_1_1detail_1_1_imag.html", "structmlx_1_1core_1_1detail_1_1_imag" ], + [ "mlx::core::detail::Log", "structmlx_1_1core_1_1detail_1_1_log.html", "structmlx_1_1core_1_1detail_1_1_log" ], + [ "mlx::core::detail::Log2", "structmlx_1_1core_1_1detail_1_1_log2.html", "structmlx_1_1core_1_1detail_1_1_log2" ], + [ "mlx::core::detail::Log10", "structmlx_1_1core_1_1detail_1_1_log10.html", "structmlx_1_1core_1_1detail_1_1_log10" ], + [ "mlx::core::detail::Log1p", "structmlx_1_1core_1_1detail_1_1_log1p.html", "structmlx_1_1core_1_1detail_1_1_log1p" ], + [ "mlx::core::detail::LogicalNot", "structmlx_1_1core_1_1detail_1_1_logical_not.html", "structmlx_1_1core_1_1detail_1_1_logical_not" ], + [ "mlx::core::detail::Negative", "structmlx_1_1core_1_1detail_1_1_negative.html", "structmlx_1_1core_1_1detail_1_1_negative" ], + [ "mlx::core::detail::Real", "structmlx_1_1core_1_1detail_1_1_real.html", "structmlx_1_1core_1_1detail_1_1_real" ], + [ "mlx::core::detail::Round", "structmlx_1_1core_1_1detail_1_1_round.html", "structmlx_1_1core_1_1detail_1_1_round" ], + [ "mlx::core::detail::Sigmoid", "structmlx_1_1core_1_1detail_1_1_sigmoid.html", "structmlx_1_1core_1_1detail_1_1_sigmoid" ], + [ "mlx::core::detail::Sign", "structmlx_1_1core_1_1detail_1_1_sign.html", "structmlx_1_1core_1_1detail_1_1_sign" ], + [ "mlx::core::detail::Sin", "structmlx_1_1core_1_1detail_1_1_sin.html", "structmlx_1_1core_1_1detail_1_1_sin" ], + [ "mlx::core::detail::Sinh", "structmlx_1_1core_1_1detail_1_1_sinh.html", "structmlx_1_1core_1_1detail_1_1_sinh" ], + [ "mlx::core::detail::Square", "structmlx_1_1core_1_1detail_1_1_square.html", "structmlx_1_1core_1_1detail_1_1_square" ], + [ "mlx::core::detail::Sqrt", "structmlx_1_1core_1_1detail_1_1_sqrt.html", "structmlx_1_1core_1_1detail_1_1_sqrt" ], + [ "mlx::core::detail::Rsqrt", "structmlx_1_1core_1_1detail_1_1_rsqrt.html", "structmlx_1_1core_1_1detail_1_1_rsqrt" ], + [ "mlx::core::detail::Tan", "structmlx_1_1core_1_1detail_1_1_tan.html", "structmlx_1_1core_1_1detail_1_1_tan" ], + [ "mlx::core::detail::Tanh", "structmlx_1_1core_1_1detail_1_1_tanh.html", "structmlx_1_1core_1_1detail_1_1_tanh" ], + [ "mlx::core::detail::Add", "structmlx_1_1core_1_1detail_1_1_add.html", "structmlx_1_1core_1_1detail_1_1_add" ], + [ "mlx::core::detail::Divide", "structmlx_1_1core_1_1detail_1_1_divide.html", "structmlx_1_1core_1_1detail_1_1_divide" ], + [ "mlx::core::detail::Remainder", "structmlx_1_1core_1_1detail_1_1_remainder.html", "structmlx_1_1core_1_1detail_1_1_remainder" ], + [ "mlx::core::detail::Equal", "structmlx_1_1core_1_1detail_1_1_equal.html", "structmlx_1_1core_1_1detail_1_1_equal" ], + [ "mlx::core::detail::NaNEqual", "structmlx_1_1core_1_1detail_1_1_na_n_equal.html", "structmlx_1_1core_1_1detail_1_1_na_n_equal" ], + [ "mlx::core::detail::Greater", "structmlx_1_1core_1_1detail_1_1_greater.html", "structmlx_1_1core_1_1detail_1_1_greater" ], + [ "mlx::core::detail::GreaterEqual", "structmlx_1_1core_1_1detail_1_1_greater_equal.html", "structmlx_1_1core_1_1detail_1_1_greater_equal" ], + [ "mlx::core::detail::Less", "structmlx_1_1core_1_1detail_1_1_less.html", "structmlx_1_1core_1_1detail_1_1_less" ], + [ "mlx::core::detail::LessEqual", "structmlx_1_1core_1_1detail_1_1_less_equal.html", "structmlx_1_1core_1_1detail_1_1_less_equal" ], + [ "mlx::core::detail::Maximum", "structmlx_1_1core_1_1detail_1_1_maximum.html", "structmlx_1_1core_1_1detail_1_1_maximum" ], + [ "mlx::core::detail::Minimum", "structmlx_1_1core_1_1detail_1_1_minimum.html", "structmlx_1_1core_1_1detail_1_1_minimum" ], + [ "mlx::core::detail::LogAddExp", "structmlx_1_1core_1_1detail_1_1_log_add_exp.html", "structmlx_1_1core_1_1detail_1_1_log_add_exp" ], + [ "mlx::core::detail::Multiply", "structmlx_1_1core_1_1detail_1_1_multiply.html", "structmlx_1_1core_1_1detail_1_1_multiply" ], + [ "mlx::core::detail::NotEqual", "structmlx_1_1core_1_1detail_1_1_not_equal.html", "structmlx_1_1core_1_1detail_1_1_not_equal" ], + [ "mlx::core::detail::Power", "structmlx_1_1core_1_1detail_1_1_power.html", "structmlx_1_1core_1_1detail_1_1_power" ], + [ "mlx::core::detail::Subtract", "structmlx_1_1core_1_1detail_1_1_subtract.html", "structmlx_1_1core_1_1detail_1_1_subtract" ], + [ "mlx::core::detail::LogicalAnd", "structmlx_1_1core_1_1detail_1_1_logical_and.html", "structmlx_1_1core_1_1detail_1_1_logical_and" ], + [ "mlx::core::detail::LogicalOr", "structmlx_1_1core_1_1detail_1_1_logical_or.html", "structmlx_1_1core_1_1detail_1_1_logical_or" ], + [ "mlx::core::detail::Select", "structmlx_1_1core_1_1detail_1_1_select.html", "structmlx_1_1core_1_1detail_1_1_select" ], + [ "mlx::core::detail::BitwiseAnd", "structmlx_1_1core_1_1detail_1_1_bitwise_and.html", "structmlx_1_1core_1_1detail_1_1_bitwise_and" ], + [ "mlx::core::detail::BitwiseOr", "structmlx_1_1core_1_1detail_1_1_bitwise_or.html", "structmlx_1_1core_1_1detail_1_1_bitwise_or" ], + [ "mlx::core::detail::BitwiseXor", "structmlx_1_1core_1_1detail_1_1_bitwise_xor.html", "structmlx_1_1core_1_1detail_1_1_bitwise_xor" ], + [ "mlx::core::detail::LeftShift", "structmlx_1_1core_1_1detail_1_1_left_shift.html", "structmlx_1_1core_1_1detail_1_1_left_shift" ], + [ "mlx::core::detail::RightShift", "structmlx_1_1core_1_1detail_1_1_right_shift.html", "structmlx_1_1core_1_1detail_1_1_right_shift" ], + [ "mlx::core::detail::fast_erf", "namespacemlx_1_1core_1_1detail.html#a90c9f6149af5adf4e2a95608d5f7b790", null ], + [ "mlx::core::detail::fast_erfinv", "namespacemlx_1_1core_1_1detail.html#ad0ff3975e4c96317df1a2de0f7a30c1d", null ], + [ "mlx::core::detail::fast_exp", "namespacemlx_1_1core_1_1detail.html#a2726436fc72d4a3f0030c89579b4d374", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2common_2ops_8h_source.html b/docs/build/html/backend_2common_2ops_8h_source.html index 9eeec1ffc..32a0c3429 100644 --- a/docs/build/html/backend_2common_2ops_8h_source.html +++ b/docs/build/html/backend_2common_2ops_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/ops.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
ops.h
@@ -144,16 +158,16 @@ $(function(){ initResizable(false); });
46
47inline float fast_erf(float a) {
-
48 float r, s, t, u;
+
48 float r, s, t, u;
49 t = std::abs(a);
50 s = a * a;
51 if (t > 0.927734375f) {
52 // maximum error 0.99527 ulp
53 r = std::fma(
54 -1.72853470e-5f, t, 3.83197126e-4f); // -0x1.220000p-16,0x1.91cfb2p-12
-
55 u = std::fma(
+
55 u = std::fma(
56 -3.88396438e-3f, t, 2.42546219e-2f); // -0x1.fd1438p-9, 0x1.8d6342p-6
-
57 r = std::fma(r, s, u);
+
57 r = std::fma(r, s, u);
58 r = std::fma(r, t, -1.06777877e-1f); // -0x1.b55cb8p-4
59 r = std::fma(r, t, -6.34846687e-1f); // -0x1.450aa0p-1
60 r = std::fma(r, t, -1.28717512e-1f); // -0x1.079d0cp-3
@@ -826,263 +840,268 @@ $(function(){ initResizable(false); });
501 template <typename T>
502 bool operator()(T x, T y) {
-
503 return x == y || (std::isnan(x) && std::isnan(y));
-
504 }
+
503 if constexpr (std::is_integral_v<T>) {
+
504 // isnan always returns false for integers, and MSVC refuses to compile.
+
505 return x == y;
+
506 } else {
+
507 return x == y || (std::isnan(x) && std::isnan(y));
+
508 }
+
509 }
-
505};
+
510};
-
506
-
-
507struct Greater {
-
508 template <typename T>
-
-
509 bool operator()(T x, T y) {
-
510 return x > y;
-
511 }
+
511
+
+
512struct Greater {
+
513 template <typename T>
+
+
514 bool operator()(T x, T y) {
+
515 return x > y;
+
516 }
-
512};
+
517};
-
513
-
- -
515 template <typename T>
-
-
516 bool operator()(T x, T y) {
-
517 return x >= y;
-
518 }
+
518
+
+ +
520 template <typename T>
+
+
521 bool operator()(T x, T y) {
+
522 return x >= y;
+
523 }
-
519};
+
524};
-
520
-
-
521struct Less {
-
522 template <typename T>
-
-
523 bool operator()(T x, T y) {
-
524 return x < y;
-
525 }
+
525
+
+
526struct Less {
+
527 template <typename T>
+
+
528 bool operator()(T x, T y) {
+
529 return x < y;
+
530 }
-
526};
+
531};
-
527
-
-
528struct LessEqual {
-
529 template <typename T>
-
-
530 bool operator()(T x, T y) {
-
531 return x <= y;
-
532 }
+
532
+
+
533struct LessEqual {
+
534 template <typename T>
+
+
535 bool operator()(T x, T y) {
+
536 return x <= y;
+
537 }
-
533};
+
538};
-
534
-
-
535struct Maximum {
-
536 template <typename T>
-
-
537 std::enable_if_t<std::is_integral_v<T>, T> operator()(T x, T y) {
-
538 return (x > y) ? x : y;
-
539 }
-
-
540
+
539
+
+
540struct Maximum {
541 template <typename T>
-
542 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T x, T y) {
-
543 if (std::isnan(x)) {
-
544 return x;
-
545 }
-
546 return (x > y) ? x : y;
-
547 }
+
542 std::enable_if_t<std::is_integral_v<T>, T> operator()(T x, T y) {
+
543 return (x > y) ? x : y;
+
544 }
-
548};
+
545
+
546 template <typename T>
+
+
547 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T x, T y) {
+
548 if (std::isnan(x)) {
+
549 return x;
+
550 }
+
551 return (x > y) ? x : y;
+
552 }
-
549
-
-
550struct Minimum {
-
551 template <typename T>
-
-
552 std::enable_if_t<std::is_integral_v<T>, T> operator()(T x, T y) {
-
553 return x < y ? x : y;
-
554 }
+
553};
-
555
+
554
+
+
555struct Minimum {
556 template <typename T>
-
557 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T x, T y) {
-
558 if (std::isnan(x)) {
-
559 return x;
-
560 }
-
561 return x < y ? x : y;
-
562 }
+
557 std::enable_if_t<std::is_integral_v<T>, T> operator()(T x, T y) {
+
558 return x < y ? x : y;
+
559 }
-
563};
+
560
+
561 template <typename T>
+
+
562 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T x, T y) {
+
563 if (std::isnan(x)) {
+
564 return x;
+
565 }
+
566 return x < y ? x : y;
+
567 }
-
564
-
-
565struct LogAddExp {
-
566 template <typename T>
-
-
567 T operator()(T x, T y) {
-
568 constexpr float inf = std::numeric_limits<float>::infinity();
-
569 auto maxval = Maximum()(x, y);
-
570 auto minval = Minimum()(x, y);
-
571 return (minval == -inf || maxval == inf)
-
572 ? maxval
-
573 : static_cast<decltype(x)>(
-
574 maxval + std::log1p(fast_exp(minval - maxval)));
-
575 }
+
568};
-
576};
+
569
+
+
570struct LogAddExp {
+
571 template <typename T>
+
+
572 T operator()(T x, T y) {
+
573 constexpr float inf = std::numeric_limits<float>::infinity();
+
574 auto maxval = Maximum()(x, y);
+
575 auto minval = Minimum()(x, y);
+
576 return (minval == -inf || maxval == inf)
+
577 ? maxval
+
578 : static_cast<decltype(x)>(
+
579 maxval + std::log1p(fast_exp(minval - maxval)));
+
580 }
-
577
-
-
578struct Multiply {
-
579 template <typename T>
-
-
580 T operator()(T x, T y) {
-
581 return x * y;
-
582 }
+
581};
-
583};
+
582
+
+
583struct Multiply {
+
584 template <typename T>
+
+
585 T operator()(T x, T y) {
+
586 return x * y;
+
587 }
-
584
-
-
585struct NotEqual {
-
586 template <typename T>
-
-
587 bool operator()(T x, T y) {
-
588 return x != y;
-
589 }
+
588};
-
590};
+
589
+
+
590struct NotEqual {
+
591 template <typename T>
+
+
592 bool operator()(T x, T y) {
+
593 return x != y;
+
594 }
-
591
-
-
592struct Power {
-
593 template <typename T>
-
-
594 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T base, T exp) {
-
595 return std::pow(base, exp);
-
596 }
+
595};
-
597
+
596
+
+
597struct Power {
598 template <typename T>
-
599 std::enable_if_t<std::is_integral_v<T>, T> operator()(T base, T exp) {
-
600 T res = 1;
-
601 while (exp) {
-
602 if (exp & 1) {
-
603 res *= base;
-
604 }
-
605 exp >>= 1;
-
606 base *= base;
-
607 }
-
608 return res;
-
609 }
+
599 std::enable_if_t<!std::is_integral_v<T>, T> operator()(T base, T exp) {
+
600 return std::pow(base, exp);
+
601 }
-
610};
+
602
+
603 template <typename T>
+
+
604 std::enable_if_t<std::is_integral_v<T>, T> operator()(T base, T exp) {
+
605 T res = 1;
+
606 while (exp) {
+
607 if (exp & 1) {
+
608 res *= base;
+
609 }
+
610 exp >>= 1;
+
611 base *= base;
+
612 }
+
613 return res;
+
614 }
-
611
-
-
612struct Subtract {
-
613 template <typename T>
-
-
614 T operator()(T x, T y) {
-
615 return x - y;
-
616 }
+
615};
-
617};
+
616
+
+
617struct Subtract {
+
618 template <typename T>
+
+
619 T operator()(T x, T y) {
+
620 return x - y;
+
621 }
-
618
-
- -
620 template <typename T>
-
-
621 T operator()(T x, T y) {
-
622 return x && y;
-
623 }
+
622};
-
624};
+
623
+
+ +
625 template <typename T>
+
+
626 T operator()(T x, T y) {
+
627 return x && y;
+
628 }
-
625
-
-
626struct LogicalOr {
-
627 template <typename T>
-
-
628 T operator()(T x, T y) {
-
629 return x || y;
-
630 }
+
629};
-
631};
+
630
+
+
631struct LogicalOr {
+
632 template <typename T>
+
+
633 T operator()(T x, T y) {
+
634 return x || y;
+
635 }
-
632
-
-
633struct Select {
-
634 template <typename T>
-
-
635 T operator()(bool condition, T x, T y) {
-
636 return condition ? x : y;
-
637 }
+
636};
-
638};
+
637
+
+
638struct Select {
+
639 template <typename T>
+
+
640 T operator()(bool condition, T x, T y) {
+
641 return condition ? x : y;
+
642 }
-
639
-
- -
641 template <typename T>
-
-
642 T operator()(T x, T y) {
-
643 return x & y;
-
644 }
+
643};
-
645};
+
644
+
+ +
646 template <typename T>
+
+
647 T operator()(T x, T y) {
+
648 return x & y;
+
649 }
-
646
-
-
647struct BitwiseOr {
-
648 template <typename T>
-
-
649 T operator()(T x, T y) {
-
650 return x | y;
-
651 }
+
650};
-
652};
+
651
+
+
652struct BitwiseOr {
+
653 template <typename T>
+
+
654 T operator()(T x, T y) {
+
655 return x | y;
+
656 }
-
653
-
- -
655 template <typename T>
-
-
656 T operator()(T x, T y) {
-
657 return x ^ y;
-
658 }
+
657};
-
659};
+
658
+
+ +
660 template <typename T>
+
+
661 T operator()(T x, T y) {
+
662 return x ^ y;
+
663 }
-
660
-
-
661struct LeftShift {
-
662 template <typename T>
-
-
663 T operator()(T x, T y) {
-
664 return x << y;
-
665 }
+
664};
-
666};
+
665
+
+
666struct LeftShift {
+
667 template <typename T>
+
+
668 T operator()(T x, T y) {
+
669 return x << y;
+
670 }
-
667
-
- -
669 template <typename T>
-
-
670 T operator()(T x, T y) {
-
671 return x >> y;
-
672 }
+
671};
-
673};
+
672
+
+ +
674 template <typename T>
+
+
675 T operator()(T x, T y) {
+
676 return x >> y;
+
677 }
-
674
-
675} // namespace mlx::core::detail
+
678};
+
+
679
+
680} // namespace mlx::core::detail
array log1p(const array &a, StreamOrDevice s={})
Natural logarithm of one plus elements in the array: log(1 + a).
array expm1(const array &a, StreamOrDevice s={})
Computes the expm1 function of the elements of an array.
@@ -1115,12 +1134,12 @@ $(function(){ initResizable(false); });
T operator()(T x)
Definition ops.h:159
Definition ops.h:171
T operator()(T x)
Definition ops.h:173
-
Definition ops.h:640
-
T operator()(T x, T y)
Definition ops.h:642
-
Definition ops.h:647
-
T operator()(T x, T y)
Definition ops.h:649
-
Definition ops.h:654
-
T operator()(T x, T y)
Definition ops.h:656
+
Definition ops.h:645
+
T operator()(T x, T y)
Definition ops.h:647
+
Definition ops.h:652
+
T operator()(T x, T y)
Definition ops.h:654
+
Definition ops.h:659
+
T operator()(T x, T y)
Definition ops.h:661
Definition ops.h:178
uint8_t operator()(uint8_t x)
Definition ops.h:195
T operator()(T x)
Definition ops.h:180
@@ -1162,51 +1181,51 @@ $(function(){ initResizable(false); });
int8_t operator()(int8_t x)
Definition ops.h:269
uint64_t operator()(uint64_t x)
Definition ops.h:290
int16_t operator()(int16_t x)
Definition ops.h:272
- -
bool operator()(T x, T y)
Definition ops.h:516
-
Definition ops.h:507
-
bool operator()(T x, T y)
Definition ops.h:509
+ +
bool operator()(T x, T y)
Definition ops.h:521
+
Definition ops.h:512
+
bool operator()(T x, T y)
Definition ops.h:514
Definition ops.h:298
T operator()(T x)
Definition ops.h:300
-
Definition ops.h:661
-
T operator()(T x, T y)
Definition ops.h:663
-
Definition ops.h:528
-
bool operator()(T x, T y)
Definition ops.h:530
-
Definition ops.h:521
-
bool operator()(T x, T y)
Definition ops.h:523
+
Definition ops.h:666
+
T operator()(T x, T y)
Definition ops.h:668
+
Definition ops.h:533
+
bool operator()(T x, T y)
Definition ops.h:535
+
Definition ops.h:526
+
bool operator()(T x, T y)
Definition ops.h:528
Definition ops.h:319
T operator()(T x)
Definition ops.h:321
Definition ops.h:326
T operator()(T x)
Definition ops.h:328
Definition ops.h:312
T operator()(T x)
Definition ops.h:314
-
Definition ops.h:565
-
T operator()(T x, T y)
Definition ops.h:567
+
Definition ops.h:570
+
T operator()(T x, T y)
Definition ops.h:572
Definition ops.h:305
T operator()(T x)
Definition ops.h:307
-
Definition ops.h:619
-
T operator()(T x, T y)
Definition ops.h:621
+
Definition ops.h:624
+
T operator()(T x, T y)
Definition ops.h:626
Definition ops.h:333
T operator()(T x)
Definition ops.h:335
-
Definition ops.h:626
-
T operator()(T x, T y)
Definition ops.h:628
-
Definition ops.h:535
-
std::enable_if_t< std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:537
-
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:542
-
Definition ops.h:550
-
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:557
-
std::enable_if_t< std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:552
-
Definition ops.h:578
-
T operator()(T x, T y)
Definition ops.h:580
+
Definition ops.h:631
+
T operator()(T x, T y)
Definition ops.h:633
+
Definition ops.h:540
+
std::enable_if_t< std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:542
+
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:547
+
Definition ops.h:555
+
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:562
+
std::enable_if_t< std::is_integral_v< T >, T > operator()(T x, T y)
Definition ops.h:557
+
Definition ops.h:583
+
T operator()(T x, T y)
Definition ops.h:585
Definition ops.h:500
bool operator()(T x, T y)
Definition ops.h:502
Definition ops.h:340
T operator()(T x)
Definition ops.h:342
-
Definition ops.h:585
-
bool operator()(T x, T y)
Definition ops.h:587
-
Definition ops.h:592
-
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T base, T exp)
Definition ops.h:594
-
std::enable_if_t< std::is_integral_v< T >, T > operator()(T base, T exp)
Definition ops.h:599
+
Definition ops.h:590
+
bool operator()(T x, T y)
Definition ops.h:592
+
Definition ops.h:597
+
std::enable_if_t<!std::is_integral_v< T >, T > operator()(T base, T exp)
Definition ops.h:599
+
std::enable_if_t< std::is_integral_v< T >, T > operator()(T base, T exp)
Definition ops.h:604
Definition ops.h:347
T operator()(T x)
Definition ops.h:349
Definition ops.h:459
@@ -1214,15 +1233,15 @@ $(function(){ initResizable(false); });
std::enable_if_t< std::is_integral_v< T > &!std::is_signed_v< T >, T > operator()(T numerator, T denominator)
Definition ops.h:461
std::enable_if_t< std::is_integral_v< T > &std::is_signed_v< T >, T > operator()(T numerator, T denominator)
Definition ops.h:468
complex64_t operator()(complex64_t numerator, complex64_t denominator)
Definition ops.h:488
-
Definition ops.h:668
-
T operator()(T x, T y)
Definition ops.h:670
+
Definition ops.h:673
+
T operator()(T x, T y)
Definition ops.h:675
Definition ops.h:354
T operator()(T x)
Definition ops.h:356
complex64_t operator()(complex64_t x)
Definition ops.h:360
Definition ops.h:424
T operator()(T x)
Definition ops.h:426
-
Definition ops.h:633
-
T operator()(bool condition, T x, T y)
Definition ops.h:635
+
Definition ops.h:638
+
T operator()(bool condition, T x, T y)
Definition ops.h:640
Definition ops.h:365
T operator()(T x)
Definition ops.h:367
Definition ops.h:373
@@ -1240,21 +1259,23 @@ $(function(){ initResizable(false); });
T operator()(T x)
Definition ops.h:419
Definition ops.h:410
T operator()(T x)
Definition ops.h:412
-
Definition ops.h:612
-
T operator()(T x, T y)
Definition ops.h:614
+
Definition ops.h:617
+
T operator()(T x, T y)
Definition ops.h:619
Definition ops.h:431
T operator()(T x)
Definition ops.h:433
Definition ops.h:438
T operator()(T x)
Definition ops.h:440
-
uint32_t u
Definition bf16.h:17
float f
Definition ops.h:16
int i
Definition ops.h:15
- -
+ + diff --git a/docs/build/html/backend_2common_2utils_8h.html b/docs/build/html/backend_2common_2utils_8h.html index f09f54813..ca7b1bf4f 100644 --- a/docs/build/html/backend_2common_2utils_8h.html +++ b/docs/build/html/backend_2common_2utils_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/utils.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -102,7 +116,7 @@ $(function(){ initResizable(false); }); - +

Classes

struct  mlx::core::ContiguousIterator< StrideT >
struct  mlx::core::ContiguousIterator
 

@@ -114,44 +128,44 @@ Namespaces

- - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + - - + + + + + +

Functions

template<typename StrideT >
StrideT mlx::core::elem_to_loc (int elem, const std::vector< int > &shape, const std::vector< StrideT > &strides)
 
size_t mlx::core::elem_to_loc (int elem, const array &a)
 
template<typename StrideT >
std::vector< StrideT > mlx::core::make_contiguous_strides (const std::vector< int > &shape)
 
std::tuple< std::vector< int >, std::vector< std::vector< int64_t > > > mlx::core::collapse_contiguous_dims (const std::vector< int > &shape, const std::vector< std::vector< int64_t > > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
 
std::tuple< std::vector< int >, std::vector< std::vector< size_t > > > mlx::core::collapse_contiguous_dims (const std::vector< int > &shape, const std::vector< std::vector< size_t > > &strides, size_t size_cap=std::numeric_limits< int32_t >::max())
 
std::tuple< std::vector< int >, std::vector< std::vector< size_t > > > mlx::core::collapse_contiguous_dims (const std::vector< array > &xs, size_t size_cap=std::numeric_limits< int32_t >::max())
 
template<typename... Arrays, typename = enable_for_arrays_t<Arrays...>>
int64_t mlx::core::elem_to_loc (int elem, const Shape &shape, const Strides &strides)
 
int64_t mlx::core::elem_to_loc (int elem, const array &a)
 
Strides mlx::core::make_contiguous_strides (const Shape &shape)
 
std::tuple< Shape, std::vector< Strides > > mlx::core::collapse_contiguous_dims (const Shape &shape, const std::vector< Strides > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
 
std::tuple< Shape, std::vector< Strides > > mlx::core::collapse_contiguous_dims (const std::vector< array > &xs, size_t size_cap=std::numeric_limits< int32_t >::max())
 
template<typename... Arrays, typename = enable_for_arrays_t<Arrays...>>
auto mlx::core::collapse_contiguous_dims (Arrays &&... xs)
 
std::pair< std::vector< int >, std::vector< int64_t > > mlx::core::collapse_contiguous_dims (const std::vector< int > &shape, const std::vector< int64_t > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
 
std::pair< std::vector< int >, std::vector< size_t > > mlx::core::collapse_contiguous_dims (const std::vector< int > &shape, const std::vector< size_t > &strides, size_t size_cap=std::numeric_limits< int32_t >::max())
 
std::pair< std::vector< int >, std::vector< size_t > > mlx::core::collapse_contiguous_dims (const array &a, size_t size_cap=std::numeric_limits< int32_t >::max())
 
template<typename StrideT >
auto mlx::core::check_contiguity (const std::vector< int > &shape, const std::vector< StrideT > &strides)
 
std::pair< Shape, Stridesmlx::core::collapse_contiguous_dims (const Shape &shape, const Strides &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
 
std::pair< Shape, Stridesmlx::core::collapse_contiguous_dims (const array &a, int64_t size_cap=std::numeric_limits< int32_t >::max())
 
auto mlx::core::check_contiguity (const Shape &shape, const Strides &strides)
 
bool mlx::core::is_donatable (const array &in, const array &out)
 
void mlx::core::move_or_copy (const array &in, array &out)
 
void mlx::core::move_or_copy (const array &in, array &out, const std::vector< size_t > &strides, array::Flags flags, size_t data_size, size_t offset=0)
 
void mlx::core::move_or_copy (const array &in, array &out, const Strides &strides, array::Flags flags, size_t data_size, size_t offset=0)
 
std::pair< bool, Stridesmlx::core::prepare_reshape (const array &in, const array &out)
 
void mlx::core::shared_buffer_reshape (const array &in, const Strides &out_strides, array &out)
 
- -
+ + diff --git a/docs/build/html/backend_2common_2utils_8h.js b/docs/build/html/backend_2common_2utils_8h.js new file mode 100644 index 000000000..e85f82ea1 --- /dev/null +++ b/docs/build/html/backend_2common_2utils_8h.js @@ -0,0 +1,18 @@ +var backend_2common_2utils_8h = +[ + [ "mlx::core::ContiguousIterator", "structmlx_1_1core_1_1_contiguous_iterator.html", "structmlx_1_1core_1_1_contiguous_iterator" ], + [ "mlx::core::check_contiguity", "namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447", null ], + [ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#ac813412cce77fc1340dcfefc6e099276", null ], + [ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#ab607cd6974ca6606826e785807156d6a", null ], + [ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e", null ], + [ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a79acfa8bc30c1f213bf893b5983eb666", null ], + [ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a977c7c84de79ad67055ae2a89b7f6869", null ], + [ "mlx::core::elem_to_loc", "namespacemlx_1_1core.html#ac9c19514210333346f02a4520641847f", null ], + [ "mlx::core::elem_to_loc", "namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a", null ], + [ "mlx::core::is_donatable", "namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84", null ], + [ "mlx::core::make_contiguous_strides", "namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0", null ], + [ "mlx::core::move_or_copy", "namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2", null ], + [ "mlx::core::move_or_copy", "namespacemlx_1_1core.html#a9fcb3711b150cb65c7778a35c51284b2", null ], + [ "mlx::core::prepare_reshape", "namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f", null ], + [ "mlx::core::shared_buffer_reshape", "namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2common_2utils_8h_source.html b/docs/build/html/backend_2common_2utils_8h_source.html index 897bfa0d5..42b3cef6d 100644 --- a/docs/build/html/backend_2common_2utils_8h_source.html +++ b/docs/build/html/backend_2common_2utils_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/utils.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
utils.h
@@ -101,244 +115,237 @@ $(function(){ initResizable(false); });
8
9namespace mlx::core {
10
-
11template <typename StrideT>
+
11inline int64_t
-
12inline StrideT elem_to_loc(
-
13 int elem,
-
14 const std::vector<int>& shape,
-
15 const std::vector<StrideT>& strides) {
-
16 StrideT loc = 0;
-
17 for (int i = shape.size() - 1; i >= 0; --i) {
-
18 auto q_and_r = ldiv(elem, shape[i]);
-
19 loc += q_and_r.rem * strides[i];
-
20 elem = q_and_r.quot;
-
21 }
-
22 return loc;
-
23}
+
12elem_to_loc(int elem, const Shape& shape, const Strides& strides) {
+
13 int64_t loc = 0;
+
14 for (int i = shape.size() - 1; i >= 0; --i) {
+
15 auto q_and_r = ldiv(elem, shape[i]);
+
16 loc += q_and_r.rem * strides[i];
+
17 elem = q_and_r.quot;
+
18 }
+
19 return loc;
+
20}
-
24
-
-
25inline size_t elem_to_loc(int elem, const array& a) {
-
26 if (a.flags().row_contiguous) {
-
27 return elem;
-
28 }
-
29 return elem_to_loc(elem, a.shape(), a.strides());
-
30}
+
21
+
+
22inline int64_t elem_to_loc(int elem, const array& a) {
+
23 if (a.flags().row_contiguous) {
+
24 return elem;
+
25 }
+
26 return elem_to_loc(elem, a.shape(), a.strides());
+
27}
-
31
-
32template <typename StrideT>
-
-
33std::vector<StrideT> make_contiguous_strides(const std::vector<int>& shape) {
-
34 std::vector<StrideT> strides(shape.size(), 1);
-
35 for (int i = shape.size() - 1; i > 0; i--) {
-
36 strides[i - 1] = strides[i] * shape[i];
-
37 }
-
38 return strides;
-
39}
+
28
+
+ +
30 Strides strides(shape.size(), 1);
+
31 for (int i = shape.size() - 1; i > 0; i--) {
+
32 strides[i - 1] = strides[i] * shape[i];
+
33 }
+
34 return strides;
+
35}
+
+
36
+
37// Collapse dims that are contiguous to possibly route to a better kernel
+
38// e.g. for x = transpose(array({0, 1, 2, 3, 4, 5, 6, 7}, {2, 2, 2}), {2, 0, 1})
+
39// should return {{2, 4}, {{1, 2}}}.
+
40//
+
41// When multiple arrays are passed they should all have the same shape. The
+
42// collapsed axes are also the same so one shape is returned.
+
43std::tuple<Shape, std::vector<Strides>> collapse_contiguous_dims(
+
44 const Shape& shape,
+
45 const std::vector<Strides>& strides,
+
46 int64_t size_cap = std::numeric_limits<int32_t>::max());
+
47
+
+
48inline std::tuple<Shape, std::vector<Strides>> collapse_contiguous_dims(
+
49 const std::vector<array>& xs,
+
50 size_t size_cap = std::numeric_limits<int32_t>::max()) {
+
51 std::vector<Strides> strides;
+
52 for (auto& x : xs) {
+
53 strides.emplace_back(x.strides());
+
54 }
+
55 return collapse_contiguous_dims(xs[0].shape(), strides, size_cap);
+
56}
-
40
-
41// Collapse dims that are contiguous to possibly route to a better kernel
-
42// e.g. for x = transpose(array({0, 1, 2, 3, 4, 5, 6, 7}, {2, 2, 2}), {2, 0, 1})
-
43// should return {{2, 4}, {{1, 2}}}.
-
44//
-
45// When multiple arrays are passed they should all have the same shape. The
-
46// collapsed axes are also the same so one shape is returned.
-
47std::tuple<std::vector<int>, std::vector<std::vector<int64_t>>>
- -
49 const std::vector<int>& shape,
-
50 const std::vector<std::vector<int64_t>>& strides,
-
51 int64_t size_cap = std::numeric_limits<int32_t>::max());
-
52std::tuple<std::vector<int>, std::vector<std::vector<size_t>>>
- -
54 const std::vector<int>& shape,
-
55 const std::vector<std::vector<size_t>>& strides,
-
56 size_t size_cap = std::numeric_limits<int32_t>::max());
57
-
58inline std::tuple<std::vector<int>, std::vector<std::vector<size_t>>>
+
58template <typename... Arrays, typename = enable_for_arrays_t<Arrays...>>
- -
60 const std::vector<array>& xs,
-
61 size_t size_cap = std::numeric_limits<int32_t>::max()) {
-
62 std::vector<std::vector<size_t>> strides;
-
63 for (auto& x : xs) {
-
64 strides.emplace_back(x.strides());
-
65 }
-
66 return collapse_contiguous_dims(xs[0].shape(), strides, size_cap);
-
67}
+
59inline auto collapse_contiguous_dims(Arrays&&... xs) {
+ +
61 std::vector<array>{std::forward<Arrays>(xs)...});
+
62}
-
68
-
69template <typename... Arrays, typename = enable_for_arrays_t<Arrays...>>
-
-
70inline auto collapse_contiguous_dims(Arrays&&... xs) {
- -
72 std::vector<array>{std::forward<Arrays>(xs)...});
-
73}
+
63
+
64// The single array version of the above.
+
65std::pair<Shape, Strides> collapse_contiguous_dims(
+
66 const Shape& shape,
+
67 const Strides& strides,
+
68 int64_t size_cap = std::numeric_limits<int32_t>::max());
+
69std::pair<Shape, Strides> collapse_contiguous_dims(
+
70 const array& a,
+
71 int64_t size_cap = std::numeric_limits<int32_t>::max());
+
72
+
+ +
+
74 inline void step() {
+
75 int dims = shape_.size();
+
76 if (dims == 0) {
+
77 return;
+
78 }
+
79 int i = dims - 1;
+
80 while (pos_[i] == (shape_[i] - 1) && i > 0) {
+
81 pos_[i] = 0;
+
82 loc -= (shape_[i] - 1) * strides_[i];
+
83 i--;
+
84 }
+
85 pos_[i]++;
+
86 loc += strides_[i];
+
87 }
-
74
-
75// The single array version of the above.
-
76std::pair<std::vector<int>, std::vector<int64_t>> collapse_contiguous_dims(
-
77 const std::vector<int>& shape,
-
78 const std::vector<int64_t>& strides,
-
79 int64_t size_cap = std::numeric_limits<int32_t>::max());
-
80std::pair<std::vector<int>, std::vector<size_t>> collapse_contiguous_dims(
-
81 const std::vector<int>& shape,
-
82 const std::vector<size_t>& strides,
-
83 size_t size_cap = std::numeric_limits<int32_t>::max());
-
84std::pair<std::vector<int>, std::vector<size_t>> collapse_contiguous_dims(
-
85 const array& a,
-
86 size_t size_cap = std::numeric_limits<int32_t>::max());
-
87
-
88template <typename StrideT>
-
- -
-
90 inline void step() {
-
91 int dims = shape_.size();
-
92 if (dims == 0) {
-
93 return;
-
94 }
-
95 int i = dims - 1;
-
96 while (pos_[i] == (shape_[i] - 1) && i > 0) {
-
97 pos_[i] = 0;
-
98 loc -= (shape_[i] - 1) * strides_[i];
-
99 i--;
-
100 }
-
101 pos_[i]++;
-
102 loc += strides_[i];
-
103 }
+
88
+
+
89 void seek(int64_t n) {
+
90 loc = 0;
+
91 for (int i = shape_.size() - 1; i >= 0; --i) {
+
92 auto q_and_r = ldiv(n, shape_[i]);
+
93 loc += q_and_r.rem * strides_[i];
+
94 pos_[i] = q_and_r.rem;
+
95 n = q_and_r.quot;
+
96 }
+
97 }
-
104
-
-
105 void seek(StrideT n) {
-
106 loc = 0;
-
107 for (int i = shape_.size() - 1; i >= 0; --i) {
-
108 auto q_and_r = ldiv(n, shape_[i]);
-
109 loc += q_and_r.rem * strides_[i];
-
110 pos_[i] = q_and_r.rem;
-
111 n = q_and_r.quot;
-
112 }
-
113 }
+
98
+
+
99 void reset() {
+
100 loc = 0;
+
101 std::fill(pos_.begin(), pos_.end(), 0);
+
102 }
-
114
-
-
115 void reset() {
-
116 loc = 0;
-
117 std::fill(pos_.begin(), pos_.end(), 0);
-
118 }
+
103
+ +
105
+
+
106 explicit ContiguousIterator(const array& a)
+
107 : shape_(a.shape()), strides_(a.strides()) {
+
108 if (!shape_.empty()) {
+
109 std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);
+
110 pos_ = Shape(shape_.size(), 0);
+
111 }
+
112 }
-
119
- -
121
-
-
122 explicit ContiguousIterator(const array& a)
-
123 : shape_(a.shape()), strides_(a.strides()) {
-
124 if (!shape_.empty()) {
-
125 std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);
-
126 pos_ = std::vector<int>(shape_.size(), 0);
-
127 }
-
128 }
+
113
+
+ +
115 const Shape& shape,
+
116 const Strides& strides,
+
117 int dims)
+
118 : shape_(shape.begin(), shape.begin() + dims),
+
119 strides_(strides.begin(), strides.begin() + dims) {
+
120 if (!shape_.empty()) {
+
121 std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);
+
122 pos_ = Shape(shape_.size(), 0);
+
123 }
+
124 }
-
129
-
- -
131 const std::vector<int>& shape,
-
132 const std::vector<StrideT>& strides,
-
133 int dims)
-
134 : shape_(shape.begin(), shape.begin() + dims),
-
135 strides_(strides.begin(), strides.begin() + dims) {
-
136 if (!shape_.empty()) {
-
137 std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);
-
138 pos_ = std::vector<int>(shape_.size(), 0);
-
139 }
-
140 }
+
125
+
126 int64_t loc{0};
+
127
+
128 private:
+
129 Shape shape_;
+
130 Strides strides_;
+
131 Shape pos_;
+
132};
-
141
-
142 StrideT loc{0};
-
143
-
144 private:
-
145 std::vector<int> shape_;
-
146 std::vector<StrideT> strides_;
-
147 std::vector<int> pos_;
-
148};
+
133
+
+
134inline auto check_contiguity(const Shape& shape, const Strides& strides) {
+
135 size_t no_broadcast_data_size = 1;
+
136 int64_t f_stride = 1;
+
137 int64_t b_stride = 1;
+
138 bool is_row_contiguous = true;
+
139 bool is_col_contiguous = true;
+
140
+
141 for (int i = 0, ri = shape.size() - 1; ri >= 0; i++, ri--) {
+
142 is_col_contiguous &= strides[i] == f_stride || shape[i] == 1;
+
143 is_row_contiguous &= strides[ri] == b_stride || shape[ri] == 1;
+
144 f_stride *= shape[i];
+
145 b_stride *= shape[ri];
+
146 if (strides[i] > 0) {
+
147 no_broadcast_data_size *= shape[i];
+
148 }
+
149 }
+
150
+
151 return std::make_tuple(
+
152 no_broadcast_data_size, is_row_contiguous, is_col_contiguous);
+
153}
-
149
-
150template <typename StrideT>
-
- -
152 const std::vector<int>& shape,
-
153 const std::vector<StrideT>& strides) {
-
154 size_t no_broadcast_data_size = 1;
-
155 size_t f_stride = 1;
-
156 size_t b_stride = 1;
-
157 bool is_row_contiguous = true;
-
158 bool is_col_contiguous = true;
-
159
-
160 for (int i = 0, ri = shape.size() - 1; ri >= 0; i++, ri--) {
-
161 is_col_contiguous &= strides[i] == f_stride || shape[i] == 1;
-
162 is_row_contiguous &= strides[ri] == b_stride || shape[ri] == 1;
-
163 f_stride *= shape[i];
-
164 b_stride *= shape[ri];
-
165 if (strides[i] > 0) {
-
166 no_broadcast_data_size *= shape[i];
-
167 }
-
168 }
-
169
-
170 return std::make_tuple(
-
171 no_broadcast_data_size, is_row_contiguous, is_col_contiguous);
-
172}
+
154
+
+
155inline bool is_donatable(const array& in, const array& out) {
+
156 constexpr size_t donation_extra = 16384;
+
157
+
158 return in.is_donatable() && in.itemsize() == out.itemsize() &&
+
159 in.buffer_size() <= out.nbytes() + donation_extra;
+
160}
-
173
-
-
174inline bool is_donatable(const array& in, const array& out) {
-
175 constexpr size_t donation_extra = 16384;
-
176
-
177 return in.is_donatable() && in.itemsize() == out.itemsize() &&
-
178 in.buffer_size() <= out.nbytes() + donation_extra;
-
179}
-
-
180
-
181void move_or_copy(const array& in, array& out);
- -
183 const array& in,
-
184 array& out,
-
185 const std::vector<size_t>& strides,
-
186 array::Flags flags,
-
187 size_t data_size,
-
188 size_t offset = 0);
-
189
-
190} // namespace mlx::core
+
161
+
162void move_or_copy(const array& in, array& out);
+ +
164 const array& in,
+
165 array& out,
+
166 const Strides& strides,
+
167 array::Flags flags,
+
168 size_t data_size,
+
169 size_t offset = 0);
+
170
+
171std::pair<bool, Strides> prepare_reshape(const array& in, const array& out);
+
172
+ +
174 const array& in,
+
175 const Strides& out_strides,
+
176 array& out);
+
177} // namespace mlx::core
-
Definition array.h:23
-
const Flags & flags() const
Get the Flags bit-field.
Definition array.h:305
-
const Shape & shape() const
The shape of the array as a vector of integers.
Definition array.h:102
-
const Strides & strides() const
The strides of the array.
Definition array.h:116
-
size_t nbytes() const
The number of bytes in the array.
Definition array.h:92
-
bool is_donatable() const
True indicates the arrays buffer is safe to reuse.
Definition array.h:270
-
size_t buffer_size() const
Definition array.h:330
-
size_t itemsize() const
The size of the array's datatype in bytes.
Definition array.h:82
+
Definition array.h:24
+
const Flags & flags() const
Get the Flags bit-field.
Definition array.h:306
+
const Shape & shape() const
The shape of the array as a vector of integers.
Definition array.h:103
+
const Strides & strides() const
The strides of the array.
Definition array.h:117
+
size_t nbytes() const
The number of bytes in the array.
Definition array.h:93
+
bool is_donatable() const
True indicates the arrays buffer is safe to reuse.
Definition array.h:271
+
size_t buffer_size() const
Definition array.h:331
+
size_t itemsize() const
The size of the array's datatype in bytes.
Definition array.h:83
Definition allocator.h:7
-
std::vector< StrideT > make_contiguous_strides(const std::vector< int > &shape)
Definition utils.h:33
-
std::tuple< std::vector< int >, std::vector< std::vector< int64_t > > > collapse_contiguous_dims(const std::vector< int > &shape, const std::vector< std::vector< int64_t > > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
-
auto check_contiguity(const std::vector< int > &shape, const std::vector< StrideT > &strides)
Definition utils.h:151
-
StrideT elem_to_loc(int elem, const std::vector< int > &shape, const std::vector< StrideT > &strides)
Definition utils.h:12
+
Strides make_contiguous_strides(const Shape &shape)
Definition utils.h:29
+
std::tuple< Shape, std::vector< Strides > > collapse_contiguous_dims(const Shape &shape, const std::vector< Strides > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
+
int64_t elem_to_loc(int elem, const Shape &shape, const Strides &strides)
Definition utils.h:12
+
std::pair< bool, Strides > prepare_reshape(const array &in, const array &out)
+
std::vector< ShapeElem > Shape
Definition array.h:21
+
std::vector< int64_t > Strides
Definition array.h:22
void move_or_copy(const array &in, array &out)
-
bool is_donatable(const array &in, const array &out)
Definition utils.h:174
-
typename std::enable_if_t< is_arrays_v< T... > > enable_for_arrays_t
Definition array.h:614
-
Definition utils.h:89
-
StrideT loc
Definition utils.h:142
-
ContiguousIterator(const std::vector< int > &shape, const std::vector< StrideT > &strides, int dims)
Definition utils.h:130
-
void seek(StrideT n)
Definition utils.h:105
-
void reset()
Definition utils.h:115
-
ContiguousIterator()
Definition utils.h:120
-
ContiguousIterator(const array &a)
Definition utils.h:122
-
void step()
Definition utils.h:90
-
Definition array.h:224
-
bool row_contiguous
Definition array.h:236
+
void shared_buffer_reshape(const array &in, const Strides &out_strides, array &out)
+
auto check_contiguity(const Shape &shape, const Strides &strides)
Definition utils.h:134
+
bool is_donatable(const array &in, const array &out)
Definition utils.h:155
+
typename std::enable_if_t< is_arrays_v< T... > > enable_for_arrays_t
Definition array.h:615
+
int64_t loc
Definition utils.h:126
+
ContiguousIterator()
Definition utils.h:104
+
ContiguousIterator(const Shape &shape, const Strides &strides, int dims)
Definition utils.h:114
+
ContiguousIterator(const array &a)
Definition utils.h:106
+
void step()
Definition utils.h:74
+
void seek(int64_t n)
Definition utils.h:89
+
void reset()
Definition utils.h:99
+
Definition array.h:225
+
bool row_contiguous
Definition array.h:237
- -
+ + diff --git a/docs/build/html/backend_2metal_2allocator_8h.html b/docs/build/html/backend_2metal_2allocator_8h.html index 30e7b00c3..adee1c0ca 100644 --- a/docs/build/html/backend_2metal_2allocator_8h.html +++ b/docs/build/html/backend_2metal_2allocator_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/allocator.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
Classes | @@ -108,6 +122,8 @@ $(function(){ initResizable(false); }); Classes class  mlx::core::metal::MetalAllocator   +class  mlx::core::metal::Buffer +  @@ -123,54 +139,14 @@ Functions

Namespaces

MetalAllocatormlx::core::metal::allocator ()
 
-

Variable Documentation

- -

◆ buf

- -
-
- - - - -
MTL::Buffer* buf
-
- -
-
- -

◆ next

- -
-
- - - - -
BufferHolder* next
-
- -
-
- -

◆ prev

- -
-
- - - - -
BufferHolder* prev
-
- -
-
- -
+ + diff --git a/docs/build/html/backend_2metal_2allocator_8h.js b/docs/build/html/backend_2metal_2allocator_8h.js new file mode 100644 index 000000000..5cc65ba48 --- /dev/null +++ b/docs/build/html/backend_2metal_2allocator_8h.js @@ -0,0 +1,6 @@ +var backend_2metal_2allocator_8h = +[ + [ "mlx::core::metal::MetalAllocator", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html", "classmlx_1_1core_1_1metal_1_1_metal_allocator" ], + [ "mlx::core::metal::Buffer", "classmlx_1_1core_1_1metal_1_1_buffer.html", "classmlx_1_1core_1_1metal_1_1_buffer" ], + [ "mlx::core::metal::allocator", "namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2allocator_8h_source.html b/docs/build/html/backend_2metal_2allocator_8h_source.html index 8cddd5983..19036a861 100644 --- a/docs/build/html/backend_2metal_2allocator_8h_source.html +++ b/docs/build/html/backend_2metal_2allocator_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/allocator.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
allocator.h
@@ -116,21 +130,21 @@ $(function(){ initResizable(false); });
22 ~BufferCache();
23
24 MTL::Buffer* reuse_from_cache(size_t size);
-
25 void recycle_to_cache(MTL::Buffer* buf);
-
26 void release_cached_buffers(size_t min_bytes_to_free);
+
25 void recycle_to_cache(MTL::Buffer* buf);
+
26 int release_cached_buffers(size_t min_bytes_to_free);
27 size_t cache_size() {
28 return pool_size_;
29 }
-
30 void clear();
+
30 int clear();
31
32 private:
33 struct BufferHolder {
34 public:
-
35 BufferHolder(MTL::Buffer* buf_) : buf(buf_), prev(nullptr), next(nullptr) {}
+
35 BufferHolder(MTL::Buffer* buf_) : buf(buf_), prev(nullptr), next(nullptr) {}
36
-
37 BufferHolder* prev;
-
38 BufferHolder* next;
-
39 MTL::Buffer* buf;
+
37 BufferHolder* prev;
+
38 BufferHolder* next;
+
39 MTL::Buffer* buf;
40 };
41
42 void add_at_head(BufferHolder* to_add);
@@ -147,7 +161,7 @@ $(function(){ initResizable(false); });
53} // namespace
54
- +
55class MetalAllocator : public allocator::Allocator {
57 public:
58 virtual Buffer malloc(size_t size, bool allow_swap = false) override;
59 virtual void free(Buffer buffer) override;
@@ -180,8 +194,8 @@ $(function(){ initResizable(false); });
78
79 private:
80 MTL::Device* device_;
- - +
81 MetalAllocator();
+
82 friend MetalAllocator& allocator();
83
84 // Caching allocator
85 BufferCache buffer_cache_;
@@ -196,19 +210,18 @@ $(function(){ initResizable(false); });
94 size_t max_pool_size_;
95 size_t wired_limit_{0};
96 bool relaxed_{true};
-
97
-
98 std::mutex mutex_;
-
99};
+
97 size_t num_resources_{0};
+
98 size_t resource_limit_{0};
+
99
+
100 std::mutex mutex_;
+
101};
-
100
-
102
-
103} // namespace mlx::core::metal
+ +
104
+
105} // namespace mlx::core::metal
-
MTL::Buffer * buf
Definition allocator.h:39
-
BufferHolder * prev
Definition allocator.h:37
-
BufferHolder * next
Definition allocator.h:38
Definition allocator.h:39
Definition allocator.h:12
@@ -231,10 +244,13 @@ $(function(){ initResizable(false); });
Device & device(mlx::core::Device)
- -
+ + diff --git a/docs/build/html/backend_2metal_2device_8h.html b/docs/build/html/backend_2metal_2device_8h.html index 951193346..01a9c47e6 100644 --- a/docs/build/html/backend_2metal_2device_8h.html +++ b/docs/build/html/backend_2metal_2device_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/device.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
Classes | @@ -145,10 +159,13 @@ Functions  
- -
+ + diff --git a/docs/build/html/backend_2metal_2device_8h.js b/docs/build/html/backend_2metal_2device_8h.js new file mode 100644 index 000000000..dc0fe6fee --- /dev/null +++ b/docs/build/html/backend_2metal_2device_8h.js @@ -0,0 +1,11 @@ +var backend_2metal_2device_8h = +[ + [ "mlx::core::metal::CommandEncoder", "structmlx_1_1core_1_1metal_1_1_command_encoder.html", "structmlx_1_1core_1_1metal_1_1_command_encoder" ], + [ "mlx::core::metal::CommandEncoder::ConcurrentContext", "structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html", "structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context" ], + [ "mlx::core::metal::Fence", "structmlx_1_1core_1_1metal_1_1_fence.html", "structmlx_1_1core_1_1metal_1_1_fence" ], + [ "mlx::core::metal::DeviceStream", "structmlx_1_1core_1_1metal_1_1_device_stream.html", "structmlx_1_1core_1_1metal_1_1_device_stream" ], + [ "mlx::core::metal::Device", "classmlx_1_1core_1_1metal_1_1_device.html", "classmlx_1_1core_1_1metal_1_1_device" ], + [ "mlx::core::metal::MTLFCList", "namespacemlx_1_1core_1_1metal.html#a616e09a1ef321d527770721cef264c54", null ], + [ "mlx::core::metal::device", "namespacemlx_1_1core_1_1metal.html#a910797b74824e6ee576fbb533dee8b57", null ], + [ "mlx::core::metal::get_colocated_mtllib_path", "namespacemlx_1_1core_1_1metal.html#a5fd6ba2040e53a254b9d71ae7ebd315f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2device_8h_source.html b/docs/build/html/backend_2metal_2device_8h_source.html index d571eed00..8421dd17c 100644 --- a/docs/build/html/backend_2metal_2device_8h_source.html +++ b/docs/build/html/backend_2metal_2device_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/device.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
device.h
@@ -134,15 +148,15 @@ $(function(){ initResizable(false); });
39 std::vector<std::tuple<const void*, MTL::DataType, NS::UInteger>>;
40
- +
42 CommandEncoder(MTL::CommandBuffer* cbuf);
- - + +
45
- +
- +
48 enc.concurrent_ = true;
49 }
@@ -156,7 +170,7 @@ $(function(){ initResizable(false); });
56
57 private:
-
58 CommandEncoder& enc;
+
58 CommandEncoder& enc;
59 };
60
@@ -245,7 +259,7 @@ $(function(){ initResizable(false); });
123
-
124struct Fence {
+
124struct Fence {
125 Fence(MTL::Fence* fence) : fence(fence) {}
@@ -257,7 +271,7 @@ $(function(){ initResizable(false); });
131
- +
133 DeviceStream(MTL::CommandQueue* queue) : queue(queue) {};
@@ -287,11 +301,11 @@ $(function(){ initResizable(false); });
157
-
158class Device {
+
158class Device {
159 public:
-
161 Device(const Device&) = delete;
-
162 Device& operator=(const Device&) = delete;
+
161 Device(const Device&) = delete;
+
162 Device& operator=(const Device&) = delete;
164
@@ -408,7 +422,7 @@ $(function(){ initResizable(false); });
269
270} // namespace mlx::core::metal
-
Definition array.h:23
+
Definition array.h:24
Definition device.h:158
void set_residency_set(const MTL::ResidencySet *residency_set)
int get_command_buffer_ops(int index)
@@ -472,15 +486,17 @@ $(function(){ initResizable(false); });
MTL::CommandBuffer * buffer
Definition device.h:148
int buffer_ops
Definition device.h:149
std::vector< array > temporaries
Definition device.h:155
-
Definition device.h:124
Fence(MTL::Fence *fence)
Definition device.h:125
~Fence()
Definition device.h:126
MTL::Fence * fence
Definition device.h:129
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2complex_8h.html b/docs/build/html/backend_2metal_2kernels_2complex_8h.html index 1cde7782d..c306930cc 100644 --- a/docs/build/html/backend_2metal_2kernels_2complex_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2complex_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/complex.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -131,10 +145,10 @@ Functions - + - +

Variables

template<typename T >
template<typename T>
static constexpr constant bool can_convert_to_complex64
 
template<typename T >
template<typename T>
static constexpr constant bool can_convert_from_complex64
 
@@ -161,7 +175,7 @@ Variables -constexpr +constexpr
@@ -190,7 +204,7 @@ Variables -constexpr +constexpr
@@ -219,7 +233,7 @@ Variables -constexpr +constexpr
@@ -248,7 +262,7 @@ Variables -constexpr +constexpr
@@ -273,7 +287,7 @@ Variables -constexpr +constexpr
@@ -302,7 +316,7 @@ Variables -constexpr +constexpr
@@ -331,7 +345,7 @@ Variables -constexpr +constexpr
@@ -360,7 +374,7 @@ Variables -constexpr +constexpr
@@ -389,7 +403,7 @@ Variables -constexpr +constexpr
@@ -418,7 +432,7 @@ Variables -constexpr +constexpr
@@ -447,7 +461,7 @@ Variables -constexpr +constexpr
@@ -461,7 +475,7 @@ Variables
-template<typename T >
+template<typename T>
@@ -472,7 +486,7 @@ template<typename T >
-staticconstexpr +staticconstexpr
@@ -488,7 +502,7 @@ template<typename T >
-template<typename T >
+template<typename T>
@@ -499,7 +513,7 @@ template<typename T >
-staticconstexpr +staticconstexpr
@@ -509,10 +523,13 @@ template<typename T >
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2complex_8h.js b/docs/build/html/backend_2metal_2kernels_2complex_8h.js new file mode 100644 index 000000000..8707a287c --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2complex_8h.js @@ -0,0 +1,17 @@ +var backend_2metal_2kernels_2complex_8h = +[ + [ "complex64_t", "structcomplex64__t.html", "structcomplex64__t" ], + [ "operator%", "backend_2metal_2kernels_2complex_8h.html#aaf53122a07c8eca858b5a8e38ae280e0", null ], + [ "operator*", "backend_2metal_2kernels_2complex_8h.html#a681d4fb076973f58f7dac894ec62a385", null ], + [ "operator+", "backend_2metal_2kernels_2complex_8h.html#ad6af5c6c5ed4898b49758618e5aee189", null ], + [ "operator-", "backend_2metal_2kernels_2complex_8h.html#af5608264cf920688607059b4e8cd3117", null ], + [ "operator-", "backend_2metal_2kernels_2complex_8h.html#a226cfd54d49f02e35c5aab3139c7596b", null ], + [ "operator/", "backend_2metal_2kernels_2complex_8h.html#ae6a708f67d6fd9b0962aa8877cec6d35", null ], + [ "operator<", "backend_2metal_2kernels_2complex_8h.html#a67674e32596a9dae2258bb8e0e6a2058", null ], + [ "operator<=", "backend_2metal_2kernels_2complex_8h.html#aee04c9a63c6716a99a027418354debb0", null ], + [ "operator==", "backend_2metal_2kernels_2complex_8h.html#abfc19f03616441245dfc7726b278f190", null ], + [ "operator>", "backend_2metal_2kernels_2complex_8h.html#a032a8d3eec2384c9f03066f7fd945995", null ], + [ "operator>=", "backend_2metal_2kernels_2complex_8h.html#aafbd686c180398c98b33d7643f893a46", null ], + [ "can_convert_from_complex64", "backend_2metal_2kernels_2complex_8h.html#ab149db78f6f19b8da6297dac4c36d893", null ], + [ "can_convert_to_complex64", "backend_2metal_2kernels_2complex_8h.html#a4f90ad54f4fae363e8d3cc41d539557b", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2complex_8h_source.html b/docs/build/html/backend_2metal_2kernels_2complex_8h_source.html index 9f5645c71..0836cb7ca 100644 --- a/docs/build/html/backend_2metal_2kernels_2complex_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2complex_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/complex.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
complex.h
@@ -111,7 +125,7 @@ $(function(){ initResizable(false); });
18 (is_convertible_v<float, T> || is_convertible_v<bfloat16_t, T>);
19
- +
21 float real;
22 float imag;
23
@@ -280,10 +294,13 @@ $(function(){ initResizable(false); });
constexpr complex64_t(T x) device
Definition complex.h:43
constexpr complex64_t(float real, float imag)
Definition complex.h:25
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2fft_8h.html b/docs/build/html/backend_2metal_2kernels_2fft_8h.html index 498ee99f4..6c9aadde9 100644 --- a/docs/build/html/backend_2metal_2kernels_2fft_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2fft_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/fft.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Macros | @@ -123,21 +137,21 @@ Functions METAL_FUNC void radix_butterfly (int i, int p, thread float2 *x, thread short *indices, thread float2 *y)   template<int radix, RadixFunc radix_func> -METAL_FUNC void radix_n_steps (int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *buf) +METAL_FUNC void radix_n_steps (int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *buf)   template<bool rader = false> -METAL_FUNC void perform_fft (int fft_idx, thread int *p, int m, int n, threadgroup float2 *buf) +METAL_FUNC void perform_fft (int fft_idx, thread int *p, int m, int n, threadgroup float2 *buf)   -template<int tg_mem_size, typename in_T , typename out_T > +template<int tg_mem_size, typename in_T, typename out_T> void fft (const device in_T *in, device out_T *out, constant const int &n, constant const int &batch_size, uint3 elem, uint3 grid)   -template<int tg_mem_size, typename in_T , typename out_T > +template<int tg_mem_size, typename in_T, typename out_T> void rader_fft (const device in_T *in, device out_T *out, const device float2 *raders_b_q, const device short *raders_g_q, const device short *raders_g_minus_q, constant const int &n, constant const int &batch_size, constant const int &rader_n, uint3 elem, uint3 grid)   -template<int tg_mem_size, typename in_T , typename out_T > +template<int tg_mem_size, typename in_T, typename out_T> void bluestein_fft (const device in_T *in, device out_T *out, const device float2 *w_q, const device float2 *w_k, constant const int &length, constant const int &n, constant const int &batch_size, uint3 elem, uint3 grid)   -template<int tg_mem_size, typename in_T , typename out_T , int step, bool real = false> +template<int tg_mem_size, typename in_T, typename out_T, int step, bool real = false> void four_step_fft (const device in_T *in, device out_T *out, constant const int &n1, constant const int &n2, constant const int &batch_size, uint3 elem, uint3 grid)   @@ -241,8 +255,7 @@ Variables
Value:
-
fft_idx, p, m, n, num_steps, inputs, indices, values, buf);
-
MTL::Buffer * buf
Definition allocator.h:39
+
fft_idx, p, m, n, num_steps, inputs, indices, values, buf);
METAL_FUNC void radix_n_steps(int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *buf)
Definition fft.h:100
@@ -269,7 +282,7 @@ Variables
-template<int tg_mem_size, typename in_T , typename out_T >
+template<int tg_mem_size, typename in_T, typename out_T>
@@ -327,7 +340,7 @@ template<int tg_mem_size, typename in_T , typename out_T >
-template<int tg_mem_size, typename in_T , typename out_T >
+template<int tg_mem_size, typename in_T, typename out_T>
void bluestein_fft
@@ -370,7 +383,7 @@ template<int tg_mem_size, typename in_T , typename out_T >
-template<int tg_mem_size, typename in_T , typename out_T , int step, bool real = false>
+template<int tg_mem_size, typename in_T, typename out_T, int step, bool real = false>
void fft
@@ -456,7 +469,7 @@ template<bool rader = false>
-template<int tg_mem_size, typename in_T , typename out_T >
+template<int tg_mem_size, typename in_T, typename out_T>
void four_step_fft
@@ -625,7 +638,7 @@ template<int radix, R
void rader_fft
-staticconstexpr +staticconstexpr
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2fft_8h.js b/docs/build/html/backend_2metal_2kernels_2fft_8h.js new file mode 100644 index 000000000..4f55396c1 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2fft_8h.js @@ -0,0 +1,36 @@ +var backend_2metal_2kernels_2fft_8h = +[ + [ "MAX_OUTPUT_SIZE", "backend_2metal_2kernels_2fft_8h.html#a28d683cf067736d76f867f30c066317e", null ], + [ "MAX_RADIX", "backend_2metal_2kernels_2fft_8h.html#a7b6e56afa21f022c5e754b000955735a", null ], + [ "RADIX_STEP", "backend_2metal_2kernels_2fft_8h.html#a794032d3a9acff0e31c77c69d0007f10", null ], + [ "RadixFunc", "backend_2metal_2kernels_2fft_8h.html#a6ba62eabfd5428644aabf89ddaa0128d", null ], + [ "bluestein_fft", "backend_2metal_2kernels_2fft_8h.html#a0abc609e9756475800e996775a96a87e", null ], + [ "fft", "backend_2metal_2kernels_2fft_8h.html#a4010b0e151e5f01e610e9c32234458c7", null ], + [ "four_step_fft", "backend_2metal_2kernels_2fft_8h.html#a6558a8205ee4c3e4767bafa93f7606de", null ], + [ "perform_fft", "backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81", null ], + [ "rader_fft", "backend_2metal_2kernels_2fft_8h.html#ad123452303f6415904f3592f660769b8", null ], + [ "radix_butterfly", "backend_2metal_2kernels_2fft_8h.html#a278d980ed397e6841ce0af44b9aa4396", null ], + [ "radix_n_steps", "backend_2metal_2kernels_2fft_8h.html#aba8d32e0911499671df93678f39da08b", null ], + [ "elems_per_thread_", "backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3", null ], + [ "inv_", "backend_2metal_2kernels_2fft_8h.html#a7a83318497519ff3ff0141b7d511ed38", null ], + [ "is_power_of_2_", "backend_2metal_2kernels_2fft_8h.html#a2a4df90e329b84ee6c1890ba7c265c9c", null ], + [ "rader_11_steps_", "backend_2metal_2kernels_2fft_8h.html#a1f3c377d05da52429172e64132dba750", null ], + [ "rader_13_steps_", "backend_2metal_2kernels_2fft_8h.html#a20d24f3e040d3d226a70d4dd7c9ac6a9", null ], + [ "rader_2_steps_", "backend_2metal_2kernels_2fft_8h.html#a2d725bfd4c30be4c605b5c4559a62892", null ], + [ "rader_3_steps_", "backend_2metal_2kernels_2fft_8h.html#adb129cc3808c08fd95af9795bfc7ae63", null ], + [ "rader_4_steps_", "backend_2metal_2kernels_2fft_8h.html#ac7c58404df0434d4f861db62d3471870", null ], + [ "rader_5_steps_", "backend_2metal_2kernels_2fft_8h.html#afea05e9a7105bafbaafca25042f4d1b4", null ], + [ "rader_6_steps_", "backend_2metal_2kernels_2fft_8h.html#a020469d1aca557ff1b49414f121dedbb", null ], + [ "rader_7_steps_", "backend_2metal_2kernels_2fft_8h.html#a0d437aef17faf8d9707ae7ffe68fdb30", null ], + [ "rader_8_steps_", "backend_2metal_2kernels_2fft_8h.html#ac6123e111816dd62a11ccb86b66fa3e9", null ], + [ "rader_m_", "backend_2metal_2kernels_2fft_8h.html#ac309c77ef775a3ef13850c5287a86480", null ], + [ "radix_11_steps_", "backend_2metal_2kernels_2fft_8h.html#a7cd17bff8bc567f71d4789ee31fa07f2", null ], + [ "radix_13_steps_", "backend_2metal_2kernels_2fft_8h.html#abb079b86e89ca88ce13a179d9ec566af", null ], + [ "radix_2_steps_", "backend_2metal_2kernels_2fft_8h.html#a53fdc660e99e6b5db6808bbd596cd374", null ], + [ "radix_3_steps_", "backend_2metal_2kernels_2fft_8h.html#a579123b7be825f08f3076287dded08e3", null ], + [ "radix_4_steps_", "backend_2metal_2kernels_2fft_8h.html#a12d99a846c3686806bab6c42148e1039", null ], + [ "radix_5_steps_", "backend_2metal_2kernels_2fft_8h.html#a903d5239b5f73577c559e97ff910892d", null ], + [ "radix_6_steps_", "backend_2metal_2kernels_2fft_8h.html#a2f7f7cc2423cfcd4998d1a2a0363c3e2", null ], + [ "radix_7_steps_", "backend_2metal_2kernels_2fft_8h.html#a2145cc8ab4d07583a735317b3cf60d55", null ], + [ "radix_8_steps_", "backend_2metal_2kernels_2fft_8h.html#a3cb03a97a209ba1346375e720ee76177", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2fft_8h_source.html b/docs/build/html/backend_2metal_2kernels_2fft_8h_source.html index 85d097d05..5f9dbbd09 100644 --- a/docs/build/html/backend_2metal_2kernels_2fft_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2fft_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/fft.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
fft.h
@@ -202,7 +216,7 @@ $(function(){ initResizable(false); });
106 thread float2* inputs,
107 thread short* indices,
108 thread float2* values,
-
109 threadgroup float2* buf) {
+
109 threadgroup float2* buf) {
110 int m_r = n / radix;
111 // When combining different sized radices, we have to do
112 // multiple butterflies in a single thread.
@@ -220,7 +234,7 @@ $(function(){ initResizable(false); });
124 index = i + t * m;
125 if (index < m_r) {
126 for (int r = 0; r < radix; r++) {
-
127 inputs[r] = buf[index + r * m_r];
+
127 inputs[r] = buf[index + r * m_r];
128 }
130 index, *p, inputs, indices + t * radix, values + t * radix);
@@ -235,7 +249,7 @@ $(function(){ initResizable(false); });
139 if (index < m_r) {
140 for (int r = 0; r < radix; r++) {
141 r_index = t * radix + r;
-
142 buf[indices[r_index]] = values[r_index];
+
142 buf[indices[r_index]] = values[r_index];
143 }
144 }
145 }
@@ -256,7 +270,7 @@ $(function(){ initResizable(false); });
157template <bool rader = false>
158METAL_FUNC void
-
159perform_fft(int fft_idx, thread int* p, int m, int n, threadgroup float2* buf) {
+
159perform_fft(int fft_idx, thread int* p, int m, int n, threadgroup float2* buf) {
160 float2 inputs[MAX_RADIX];
161 short indices[MAX_OUTPUT_SIZE];
162 float2 values[MAX_OUTPUT_SIZE];
@@ -310,9 +324,9 @@ $(function(){ initResizable(false); });
208 int fft_idx = elem.z; // Thread index in DFT
209 int m = grid.z; // Threads per DFT
210 int tg_idx = elem.y * n; // Index of this DFT in threadgroup
-
211 threadgroup float2* buf = &shared_in[tg_idx];
+
211 threadgroup float2* buf = &shared_in[tg_idx];
212
-
213 perform_fft(fft_idx, &p, m, n, buf);
+
213 perform_fft(fft_idx, &p, m, n, buf);
214
215 read_writer.write();
216}
@@ -379,7 +393,7 @@ $(function(){ initResizable(false); });
275
276 int fft_idx = elem.z;
277 int tg_idx = elem.y * n;
-
278 threadgroup float2* buf = &shared_in[tg_idx];
+
278 threadgroup float2* buf = &shared_in[tg_idx];
279
280 // rader_m = n / rader_n;
281 int rader_m = rader_m_;
@@ -391,7 +405,7 @@ $(function(){ initResizable(false); });
287 // 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
288 short x_0_index =
289 metal::min(fft_idx * elems_per_thread_ / (rader_n - 1), rader_m - 1);
-
290 float2 x_0[2] = {buf[x_0_index], buf[x_0_index + 1]};
+
290 float2 x_0[2] = {buf[x_0_index], buf[x_0_index + 1]};
291
292 // Do the Rader permutation in shared memory
293 float2 temp[MAX_RADIX];
@@ -399,26 +413,26 @@ $(function(){ initResizable(false); });
295 for (int e = 0; e < elems_per_thread_; e++) {
296 short index = metal::min(fft_idx * elems_per_thread_ + e, max_index);
297 short g_q = raders_g_q[index / rader_m];
-
298 temp[e] = buf[rader_m + (g_q - 1) * rader_m + index % rader_m];
+
298 temp[e] = buf[rader_m + (g_q - 1) * rader_m + index % rader_m];
299 }
300
301 threadgroup_barrier(mem_flags::mem_threadgroup);
302
303 for (int e = 0; e < elems_per_thread_; e++) {
304 short index = metal::min(fft_idx * elems_per_thread_ + e, max_index);
-
305 buf[index + rader_m] = temp[e];
+
305 buf[index + rader_m] = temp[e];
306 }
307
308 threadgroup_barrier(mem_flags::mem_threadgroup);
309
310 // Rader FFT on x[rader_m:]
311 int p = 1;
-
312 perform_fft</*rader=*/true>(fft_idx, &p, m, n - rader_m, buf + rader_m);
+
312 perform_fft</*rader=*/true>(fft_idx, &p, m, n - rader_m, buf + rader_m);
313
314 // x_1 + ... + x_n is computed for us in the first FFT step so
315 // we save it in the first rader_m indices of the array for later.
316 int x_sum_index = metal::min(fft_idx, rader_m - 1);
-
317 buf[x_sum_index] = buf[rader_m + x_sum_index * (rader_n - 1)];
+
317 buf[x_sum_index] = buf[rader_m + x_sum_index * (rader_n - 1)];
318
319 float2 inv = {1.0f, -1.0f};
320 for (int e = 0; e < elems_per_thread_; e++) {
@@ -426,7 +440,7 @@ $(function(){ initResizable(false); });
322 short interleaved_index =
323 index / rader_m + (index % rader_m) * (rader_n - 1);
324 temp[e] = complex_mul(
-
325 buf[rader_m + interleaved_index],
+
325 buf[rader_m + interleaved_index],
326 raders_b_q[interleaved_index % (rader_n - 1)]);
327 }
328
@@ -434,25 +448,25 @@ $(function(){ initResizable(false); });
330
331 for (int e = 0; e < elems_per_thread_; e++) {
332 short index = metal::min(fft_idx * elems_per_thread_ + e, max_index);
-
333 buf[rader_m + index] = temp[e] * inv;
+
333 buf[rader_m + index] = temp[e] * inv;
334 }
335
336 threadgroup_barrier(mem_flags::mem_threadgroup);
337
338 // Rader IFFT on x[rader_m:]
339 p = 1;
-
340 perform_fft</*rader=*/true>(fft_idx, &p, m, n - rader_m, buf + rader_m);
+
340 perform_fft</*rader=*/true>(fft_idx, &p, m, n - rader_m, buf + rader_m);
341
342 float2 rader_inv_factor = {1.0f / (rader_n - 1), -1.0f / (rader_n - 1)};
343
344 for (int e = 0; e < elems_per_thread_; e++) {
345 short index = metal::min(fft_idx * elems_per_thread_ + e, n - rader_m - 1);
346 short diff_index = index / (rader_n - 1) - x_0_index;
-
347 temp[e] = buf[rader_m + index] * rader_inv_factor + x_0[diff_index];
+
347 temp[e] = buf[rader_m + index] * rader_inv_factor + x_0[diff_index];
348 }
349
350 // Use the sum of elements that was computed in the first FFT
-
351 float2 x_sum = buf[x_0_index] + x_0[0];
+
351 float2 x_sum = buf[x_0_index] + x_0[0];
352
353 threadgroup_barrier(mem_flags::mem_threadgroup);
354
@@ -461,15 +475,15 @@ $(function(){ initResizable(false); });
357 short g_q_index = index % (rader_n - 1);
358 short g_q = raders_g_minus_q[g_q_index];
359 short out_index = index - g_q_index + g_q + (index / (rader_n - 1));
-
360 buf[out_index] = temp[e];
+
360 buf[out_index] = temp[e];
361 }
362
-
363 buf[x_0_index * rader_n] = x_sum;
+
363 buf[x_0_index * rader_n] = x_sum;
364
365 threadgroup_barrier(mem_flags::mem_threadgroup);
366
367 p = rader_n;
-
368 perform_fft(fft_idx, &p, m, n, buf);
+
368 perform_fft(fft_idx, &p, m, n, buf);
369
370 read_writer.write();
371}
@@ -520,22 +534,22 @@ $(function(){ initResizable(false); });
414 int fft_idx = elem.z; // Thread index in DFT
415 int m = grid.z; // Threads per DFT
416 int tg_idx = elem.y * n; // Index of this DFT in threadgroup
-
417 threadgroup float2* buf = &shared_in[tg_idx];
+
417 threadgroup float2* buf = &shared_in[tg_idx];
418
419 // fft
-
420 perform_fft(fft_idx, &p, m, n, buf);
+
420 perform_fft(fft_idx, &p, m, n, buf);
421
422 float2 inv = float2(1.0f, -1.0f);
423 for (int t = 0; t < elems_per_thread_; t++) {
424 int index = fft_idx + t * m;
-
425 buf[index] = complex_mul(buf[index], w_q[index]) * inv;
+
425 buf[index] = complex_mul(buf[index], w_q[index]) * inv;
426 }
427
428 threadgroup_barrier(mem_flags::mem_threadgroup);
429
430 // ifft
431 p = 1;
-
432 perform_fft(fft_idx, &p, m, n, buf);
+
432 perform_fft(fft_idx, &p, m, n, buf);
433
434 read_writer.write_padded(length, w_k);
435}
@@ -566,7 +580,7 @@ $(function(){ initResizable(false); });
458 int fft_idx = elem.z;
459
460 threadgroup float2 shared_in[tg_mem_size];
-
461 threadgroup float2* buf = &shared_in[elem.y * n];
+
461 threadgroup float2* buf = &shared_in[elem.y * n];
462
463 using read_writer_t = ReadWriter<in_T, out_T, step, real>;
464 read_writer_t read_writer = read_writer_t(
@@ -588,12 +602,11 @@ $(function(){ initResizable(false); });
480 threadgroup_barrier(mem_flags::mem_threadgroup);
481
482 int p = 1;
-
483 perform_fft(fft_idx, &p, m, n, buf);
+
483 perform_fft(fft_idx, &p, m, n, buf);
484
485 read_writer.write_strided(stride, overall_n);
486}
-
MTL::Buffer * buf
Definition allocator.h:39
static constant constexpr const int rader_6_steps_
Definition fft.h:43
METAL_FUNC void perform_fft(int fft_idx, thread int *p, int m, int n, threadgroup float2 *buf)
Definition fft.h:159
void bluestein_fft(const device in_T *in, device out_T *out, const device float2 *w_q, const device float2 *w_k, constant const int &length, constant const int &n, constant const int &batch_size, uint3 elem, uint3 grid)
Definition fft.h:374
@@ -649,10 +662,13 @@ $(function(){ initResizable(false); });
#define STEEL_CONST
Definition defines.h:3
Definition readwrite.h:35
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.html b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.html index 563d1b301..9aeb476fc 100644 --- a/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/jit/bf16.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
@@ -151,10 +165,13 @@ Macros
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.js b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.js new file mode 100644 index 000000000..9545bed3d --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h.js @@ -0,0 +1,6 @@ +var backend_2metal_2kernels_2jit_2bf16_8h = +[ + [ "jit_else", "backend_2metal_2kernels_2jit_2bf16_8h.html#a4b2f08732045407adc7ee181e39e5ae3", null ], + [ "jit_endif", "backend_2metal_2kernels_2jit_2bf16_8h.html#a5049b44a1fffcb837e0c470ae4cafc56", null ], + [ "jit_if", "backend_2metal_2kernels_2jit_2bf16_8h.html#aaf5bb88c2349054a6c4c2aefee63d3d2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h_source.html b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h_source.html index fd1428656..abcd64be5 100644 --- a/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2jit_2bf16_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/jit/bf16.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
bf16.h
@@ -112,10 +126,13 @@ $(function(){ initResizable(false); });
#define jit_if
Definition bf16.h:4
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.html b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.html index 76a2309e8..f3a9773dc 100644 --- a/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_0/bf16.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -827,10 +841,10 @@ Functions - + - +

Variables

template<typename T >
template<typename T>
static constexpr constant bool can_convert_to_bfloat
 
template<typename T >
template<typename T>
static constexpr constant bool can_convert_from_bfloat
 
@@ -1163,7 +1177,7 @@ Variables -inline +inline
@@ -1188,7 +1202,7 @@ Variables -constexpr +constexpr
@@ -1213,7 +1227,7 @@ Variables -constexpr +constexpr
@@ -1242,7 +1256,7 @@ Variables -constexpr +constexpr
@@ -1271,7 +1285,7 @@ Variables -constexpr +constexpr
@@ -1300,7 +1314,7 @@ Variables -constexpr +constexpr
@@ -1329,7 +1343,7 @@ Variables -constexpr +constexpr
@@ -1358,7 +1372,7 @@ Variables -constexpr +constexpr
@@ -1387,7 +1401,7 @@ Variables -constexpr +constexpr
@@ -1416,7 +1430,7 @@ Variables -constexpr +constexpr
@@ -1445,7 +1459,7 @@ Variables -constexpr +constexpr
@@ -1474,7 +1488,7 @@ Variables -constexpr +constexpr
@@ -1503,7 +1517,7 @@ Variables -constexpr +constexpr
@@ -1532,7 +1546,7 @@ Variables -constexpr +constexpr
@@ -1561,7 +1575,7 @@ Variables -constexpr +constexpr
@@ -1590,7 +1604,7 @@ Variables -constexpr +constexpr
@@ -1619,7 +1633,7 @@ Variables -constexpr +constexpr
@@ -1648,7 +1662,7 @@ Variables -constexpr +constexpr
@@ -1677,7 +1691,7 @@ Variables -constexpr +constexpr
@@ -1706,7 +1720,7 @@ Variables -constexpr +constexpr
@@ -1735,7 +1749,7 @@ Variables -constexpr +constexpr
@@ -1764,7 +1778,7 @@ Variables -constexpr +constexpr
@@ -1793,7 +1807,7 @@ Variables -constexpr +constexpr
@@ -1822,7 +1836,7 @@ Variables -constexpr +constexpr
@@ -1851,7 +1865,7 @@ Variables -constexpr +constexpr
@@ -1880,7 +1894,7 @@ Variables -constexpr +constexpr
@@ -1909,7 +1923,7 @@ Variables -constexpr +constexpr
@@ -1938,7 +1952,7 @@ Variables -constexpr +constexpr
@@ -1967,7 +1981,7 @@ Variables -constexpr +constexpr
@@ -1996,7 +2010,7 @@ Variables -constexpr +constexpr
@@ -2025,7 +2039,7 @@ Variables -constexpr +constexpr
@@ -2054,7 +2068,7 @@ Variables -constexpr +constexpr
@@ -2083,7 +2097,7 @@ Variables -constexpr +constexpr
@@ -2112,7 +2126,7 @@ Variables -constexpr +constexpr
@@ -2141,7 +2155,7 @@ Variables -constexpr +constexpr
@@ -2170,7 +2184,7 @@ Variables -constexpr +constexpr
@@ -2199,7 +2213,7 @@ Variables -constexpr +constexpr
@@ -2228,7 +2242,7 @@ Variables -constexpr +constexpr
@@ -2257,7 +2271,7 @@ Variables -constexpr +constexpr
@@ -2286,7 +2300,7 @@ Variables -constexpr +constexpr
@@ -2315,7 +2329,7 @@ Variables -constexpr +constexpr
@@ -2344,7 +2358,7 @@ Variables -constexpr +constexpr
@@ -2373,7 +2387,7 @@ Variables -constexpr +constexpr
@@ -2402,7 +2416,7 @@ Variables -constexpr +constexpr
@@ -2431,7 +2445,7 @@ Variables -constexpr +constexpr
@@ -2460,7 +2474,7 @@ Variables -constexpr +constexpr
@@ -2489,7 +2503,7 @@ Variables -constexpr +constexpr
@@ -2518,7 +2532,7 @@ Variables -constexpr +constexpr
@@ -2547,7 +2561,7 @@ Variables -constexpr +constexpr
@@ -2576,7 +2590,7 @@ Variables -constexpr +constexpr
@@ -2605,7 +2619,7 @@ Variables -constexpr +constexpr
@@ -2634,7 +2648,7 @@ Variables -constexpr +constexpr
@@ -2663,7 +2677,7 @@ Variables -constexpr +constexpr
@@ -2692,7 +2706,7 @@ Variables -constexpr +constexpr
@@ -2721,7 +2735,7 @@ Variables -constexpr +constexpr
@@ -2750,7 +2764,7 @@ Variables -constexpr +constexpr
@@ -2779,7 +2793,7 @@ Variables -constexpr +constexpr
@@ -2808,7 +2822,7 @@ Variables -constexpr +constexpr
@@ -2837,7 +2851,7 @@ Variables -constexpr +constexpr
@@ -2866,7 +2880,7 @@ Variables -constexpr +constexpr
@@ -2895,7 +2909,7 @@ Variables -constexpr +constexpr
@@ -2924,7 +2938,7 @@ Variables -constexpr +constexpr
@@ -2953,7 +2967,7 @@ Variables -constexpr +constexpr
@@ -2982,7 +2996,7 @@ Variables -constexpr +constexpr
@@ -3011,7 +3025,7 @@ Variables -constexpr +constexpr
@@ -3040,7 +3054,7 @@ Variables -constexpr +constexpr
@@ -3069,7 +3083,7 @@ Variables -constexpr +constexpr
@@ -3098,7 +3112,7 @@ Variables -constexpr +constexpr
@@ -3127,7 +3141,7 @@ Variables -constexpr +constexpr
@@ -3156,7 +3170,7 @@ Variables -constexpr +constexpr
@@ -3185,7 +3199,7 @@ Variables -constexpr +constexpr
@@ -3214,7 +3228,7 @@ Variables -constexpr +constexpr
@@ -3243,7 +3257,7 @@ Variables -constexpr +constexpr
@@ -3272,7 +3286,7 @@ Variables -constexpr +constexpr
@@ -3301,7 +3315,7 @@ Variables -constexpr +constexpr
@@ -3330,7 +3344,7 @@ Variables -constexpr +constexpr
@@ -3359,7 +3373,7 @@ Variables -constexpr +constexpr
@@ -3388,7 +3402,7 @@ Variables -constexpr +constexpr
@@ -3417,7 +3431,7 @@ Variables -constexpr +constexpr
@@ -3446,7 +3460,7 @@ Variables -constexpr +constexpr
@@ -3475,7 +3489,7 @@ Variables -constexpr +constexpr
@@ -3504,7 +3518,7 @@ Variables -constexpr +constexpr
@@ -3533,7 +3547,7 @@ Variables -constexpr +constexpr
@@ -3562,7 +3576,7 @@ Variables -constexpr +constexpr
@@ -3591,7 +3605,7 @@ Variables -constexpr +constexpr
@@ -3620,7 +3634,7 @@ Variables -constexpr +constexpr
@@ -3649,7 +3663,7 @@ Variables -constexpr +constexpr
@@ -3678,7 +3692,7 @@ Variables -constexpr +constexpr
@@ -3707,7 +3721,7 @@ Variables -constexpr +constexpr
@@ -3736,7 +3750,7 @@ Variables -constexpr +constexpr
@@ -3765,7 +3779,7 @@ Variables -constexpr +constexpr
@@ -3794,7 +3808,7 @@ Variables -constexpr +constexpr
@@ -3823,7 +3837,7 @@ Variables -constexpr +constexpr
@@ -3852,7 +3866,7 @@ Variables -constexpr +constexpr
@@ -3881,7 +3895,7 @@ Variables -constexpr +constexpr
@@ -3910,7 +3924,7 @@ Variables -constexpr +constexpr
@@ -3939,7 +3953,7 @@ Variables -constexpr +constexpr
@@ -3968,7 +3982,7 @@ Variables -constexpr +constexpr
@@ -3997,7 +4011,7 @@ Variables -constexpr +constexpr
@@ -4026,7 +4040,7 @@ Variables -constexpr +constexpr
@@ -4055,7 +4069,7 @@ Variables -constexpr +constexpr
@@ -4084,7 +4098,7 @@ Variables -constexpr +constexpr
@@ -4113,7 +4127,7 @@ Variables -constexpr +constexpr
@@ -4142,7 +4156,7 @@ Variables -constexpr +constexpr
@@ -4171,7 +4185,7 @@ Variables -constexpr +constexpr
@@ -4200,7 +4214,7 @@ Variables -constexpr +constexpr
@@ -4229,7 +4243,7 @@ Variables -constexpr +constexpr
@@ -4258,7 +4272,7 @@ Variables -constexpr +constexpr
@@ -4287,7 +4301,7 @@ Variables -constexpr +constexpr
@@ -4316,7 +4330,7 @@ Variables -constexpr +constexpr
@@ -4345,7 +4359,7 @@ Variables -constexpr +constexpr
@@ -4374,7 +4388,7 @@ Variables -constexpr +constexpr
@@ -4403,7 +4417,7 @@ Variables -constexpr +constexpr
@@ -4432,7 +4446,7 @@ Variables -constexpr +constexpr
@@ -4461,7 +4475,7 @@ Variables -constexpr +constexpr
@@ -4490,7 +4504,7 @@ Variables -constexpr +constexpr
@@ -4519,7 +4533,7 @@ Variables -constexpr +constexpr
@@ -4548,7 +4562,7 @@ Variables -constexpr +constexpr
@@ -4577,7 +4591,7 @@ Variables -constexpr +constexpr
@@ -4606,7 +4620,7 @@ Variables -constexpr +constexpr
@@ -4635,7 +4649,7 @@ Variables -constexpr +constexpr
@@ -4664,7 +4678,7 @@ Variables -constexpr +constexpr
@@ -4693,7 +4707,7 @@ Variables -constexpr +constexpr
@@ -4722,7 +4736,7 @@ Variables -constexpr +constexpr
@@ -4751,7 +4765,7 @@ Variables -constexpr +constexpr
@@ -4780,7 +4794,7 @@ Variables -constexpr +constexpr
@@ -4809,7 +4823,7 @@ Variables -constexpr +constexpr
@@ -4838,7 +4852,7 @@ Variables -constexpr +constexpr
@@ -4867,7 +4881,7 @@ Variables -constexpr +constexpr
@@ -4896,7 +4910,7 @@ Variables -constexpr +constexpr
@@ -4925,7 +4939,7 @@ Variables -constexpr +constexpr
@@ -4954,7 +4968,7 @@ Variables -constexpr +constexpr
@@ -4983,7 +4997,7 @@ Variables -constexpr +constexpr
@@ -5012,7 +5026,7 @@ Variables -constexpr +constexpr
@@ -5041,7 +5055,7 @@ Variables -constexpr +constexpr
@@ -5070,7 +5084,7 @@ Variables -constexpr +constexpr
@@ -5099,7 +5113,7 @@ Variables -constexpr +constexpr
@@ -5128,7 +5142,7 @@ Variables -constexpr +constexpr
@@ -5157,7 +5171,7 @@ Variables -constexpr +constexpr
@@ -5186,7 +5200,7 @@ Variables -constexpr +constexpr
@@ -5215,7 +5229,7 @@ Variables -constexpr +constexpr
@@ -5244,7 +5258,7 @@ Variables -constexpr +constexpr
@@ -5273,7 +5287,7 @@ Variables -constexpr +constexpr
@@ -5302,7 +5316,7 @@ Variables -constexpr +constexpr
@@ -5331,7 +5345,7 @@ Variables -constexpr +constexpr
@@ -5360,7 +5374,7 @@ Variables -constexpr +constexpr
@@ -5389,7 +5403,7 @@ Variables -constexpr +constexpr
@@ -5418,7 +5432,7 @@ Variables -constexpr +constexpr
@@ -5447,7 +5461,7 @@ Variables -constexpr +constexpr
@@ -5476,7 +5490,7 @@ Variables -constexpr +constexpr
@@ -5505,7 +5519,7 @@ Variables -constexpr +constexpr
@@ -5530,7 +5544,7 @@ Variables -constexpr +constexpr
@@ -5559,7 +5573,7 @@ Variables -constexpr +constexpr
@@ -5588,7 +5602,7 @@ Variables -constexpr +constexpr
@@ -5617,7 +5631,7 @@ Variables -constexpr +constexpr
@@ -5646,7 +5660,7 @@ Variables -constexpr +constexpr
@@ -5675,7 +5689,7 @@ Variables -constexpr +constexpr
@@ -5704,7 +5718,7 @@ Variables -constexpr +constexpr
@@ -5733,7 +5747,7 @@ Variables -constexpr +constexpr
@@ -5762,7 +5776,7 @@ Variables -constexpr +constexpr
@@ -5791,7 +5805,7 @@ Variables -constexpr +constexpr
@@ -5820,7 +5834,7 @@ Variables -constexpr +constexpr
@@ -5849,7 +5863,7 @@ Variables -constexpr +constexpr
@@ -5878,7 +5892,7 @@ Variables -constexpr +constexpr
@@ -5907,7 +5921,7 @@ Variables -constexpr +constexpr
@@ -5936,7 +5950,7 @@ Variables -constexpr +constexpr
@@ -5965,7 +5979,7 @@ Variables -constexpr +constexpr
@@ -5994,7 +6008,7 @@ Variables -constexpr +constexpr
@@ -6023,7 +6037,7 @@ Variables -constexpr +constexpr
@@ -6052,7 +6066,7 @@ Variables -constexpr +constexpr
@@ -6081,7 +6095,7 @@ Variables -constexpr +constexpr
@@ -6110,7 +6124,7 @@ Variables -constexpr +constexpr
@@ -6139,7 +6153,7 @@ Variables -constexpr +constexpr
@@ -6168,7 +6182,7 @@ Variables -constexpr +constexpr
@@ -6197,7 +6211,7 @@ Variables -constexpr +constexpr
@@ -6226,7 +6240,7 @@ Variables -constexpr +constexpr
@@ -6255,7 +6269,7 @@ Variables -constexpr +constexpr
@@ -6284,7 +6298,7 @@ Variables -constexpr +constexpr
@@ -6313,7 +6327,7 @@ Variables -constexpr +constexpr
@@ -6342,7 +6356,7 @@ Variables -constexpr +constexpr
@@ -6371,7 +6385,7 @@ Variables -constexpr +constexpr
@@ -6400,7 +6414,7 @@ Variables -constexpr +constexpr
@@ -6429,7 +6443,7 @@ Variables -constexpr +constexpr
@@ -6458,7 +6472,7 @@ Variables -constexpr +constexpr
@@ -6487,7 +6501,7 @@ Variables -constexpr +constexpr
@@ -6516,7 +6530,7 @@ Variables -constexpr +constexpr
@@ -6545,7 +6559,7 @@ Variables -constexpr +constexpr
@@ -6574,7 +6588,7 @@ Variables -constexpr +constexpr
@@ -6603,7 +6617,7 @@ Variables -constexpr +constexpr
@@ -6632,7 +6646,7 @@ Variables -constexpr +constexpr
@@ -6661,7 +6675,7 @@ Variables -constexpr +constexpr
@@ -6690,7 +6704,7 @@ Variables -constexpr +constexpr
@@ -6719,7 +6733,7 @@ Variables -constexpr +constexpr
@@ -6748,7 +6762,7 @@ Variables -constexpr +constexpr
@@ -6777,7 +6791,7 @@ Variables -constexpr +constexpr
@@ -6806,7 +6820,7 @@ Variables -constexpr +constexpr
@@ -6835,7 +6849,7 @@ Variables -constexpr +constexpr
@@ -6864,7 +6878,7 @@ Variables -constexpr +constexpr
@@ -6893,7 +6907,7 @@ Variables -constexpr +constexpr
@@ -6922,7 +6936,7 @@ Variables -constexpr +constexpr
@@ -6951,7 +6965,7 @@ Variables -constexpr +constexpr
@@ -6980,7 +6994,7 @@ Variables -constexpr +constexpr
@@ -7009,7 +7023,7 @@ Variables -constexpr +constexpr
@@ -7038,7 +7052,7 @@ Variables -constexpr +constexpr
@@ -7067,7 +7081,7 @@ Variables -constexpr +constexpr
@@ -7096,7 +7110,7 @@ Variables -constexpr +constexpr
@@ -7125,7 +7139,7 @@ Variables -constexpr +constexpr
@@ -7154,7 +7168,7 @@ Variables -constexpr +constexpr
@@ -7183,7 +7197,7 @@ Variables -constexpr +constexpr
@@ -7212,7 +7226,7 @@ Variables -constexpr +constexpr
@@ -7241,7 +7255,7 @@ Variables -constexpr +constexpr
@@ -7270,7 +7284,7 @@ Variables -constexpr +constexpr
@@ -7299,7 +7313,7 @@ Variables -constexpr +constexpr
@@ -7328,7 +7342,7 @@ Variables -constexpr +constexpr
@@ -7357,7 +7371,7 @@ Variables -constexpr +constexpr
@@ -7386,7 +7400,7 @@ Variables -constexpr +constexpr
@@ -7415,7 +7429,7 @@ Variables -constexpr +constexpr
@@ -7444,7 +7458,7 @@ Variables -constexpr +constexpr
@@ -7473,7 +7487,7 @@ Variables -constexpr +constexpr
@@ -7502,7 +7516,7 @@ Variables -constexpr +constexpr
@@ -7531,7 +7545,7 @@ Variables -constexpr +constexpr
@@ -7560,7 +7574,7 @@ Variables -constexpr +constexpr
@@ -7589,7 +7603,7 @@ Variables -constexpr +constexpr
@@ -7618,7 +7632,7 @@ Variables -constexpr +constexpr
@@ -7647,7 +7661,7 @@ Variables -constexpr +constexpr
@@ -7676,7 +7690,7 @@ Variables -constexpr +constexpr
@@ -7705,7 +7719,7 @@ Variables -constexpr +constexpr
@@ -7734,7 +7748,7 @@ Variables -constexpr +constexpr
@@ -7763,7 +7777,7 @@ Variables -constexpr +constexpr
@@ -7792,7 +7806,7 @@ Variables -constexpr +constexpr
@@ -7821,7 +7835,7 @@ Variables -constexpr +constexpr
@@ -7850,7 +7864,7 @@ Variables -constexpr +constexpr
@@ -7879,7 +7893,7 @@ Variables -constexpr +constexpr
@@ -7908,7 +7922,7 @@ Variables -constexpr +constexpr
@@ -7937,7 +7951,7 @@ Variables -constexpr +constexpr
@@ -7966,7 +7980,7 @@ Variables -constexpr +constexpr
@@ -7995,7 +8009,7 @@ Variables -constexpr +constexpr
@@ -8024,7 +8038,7 @@ Variables -constexpr +constexpr
@@ -8053,7 +8067,7 @@ Variables -constexpr +constexpr
@@ -8082,7 +8096,7 @@ Variables -constexpr +constexpr
@@ -8111,7 +8125,7 @@ Variables -constexpr +constexpr
@@ -8140,7 +8154,7 @@ Variables -constexpr +constexpr
@@ -8169,7 +8183,7 @@ Variables -constexpr +constexpr
@@ -8198,7 +8212,7 @@ Variables -constexpr +constexpr
@@ -8227,7 +8241,7 @@ Variables -constexpr +constexpr
@@ -8256,7 +8270,7 @@ Variables -constexpr +constexpr
@@ -8285,7 +8299,7 @@ Variables -constexpr +constexpr
@@ -8314,7 +8328,7 @@ Variables -constexpr +constexpr
@@ -8343,7 +8357,7 @@ Variables -constexpr +constexpr
@@ -8372,7 +8386,7 @@ Variables -constexpr +constexpr
@@ -8401,7 +8415,7 @@ Variables -constexpr +constexpr
@@ -8430,7 +8444,7 @@ Variables -constexpr +constexpr
@@ -8459,7 +8473,7 @@ Variables -constexpr +constexpr
@@ -8488,7 +8502,7 @@ Variables -constexpr +constexpr
@@ -8517,7 +8531,7 @@ Variables -constexpr +constexpr
@@ -8546,7 +8560,7 @@ Variables -constexpr +constexpr
@@ -8575,7 +8589,7 @@ Variables -constexpr +constexpr
@@ -8604,7 +8618,7 @@ Variables -constexpr +constexpr
@@ -8633,7 +8647,7 @@ Variables -constexpr +constexpr
@@ -8662,7 +8676,7 @@ Variables -constexpr +constexpr
@@ -8691,7 +8705,7 @@ Variables -constexpr +constexpr
@@ -8720,7 +8734,7 @@ Variables -constexpr +constexpr
@@ -8749,7 +8763,7 @@ Variables -constexpr +constexpr
@@ -8778,7 +8792,7 @@ Variables -constexpr +constexpr
@@ -8807,7 +8821,7 @@ Variables -constexpr +constexpr
@@ -8836,7 +8850,7 @@ Variables -constexpr +constexpr
@@ -8865,7 +8879,7 @@ Variables -constexpr +constexpr
@@ -8894,7 +8908,7 @@ Variables -constexpr +constexpr
@@ -8923,7 +8937,7 @@ Variables -constexpr +constexpr
@@ -8952,7 +8966,7 @@ Variables -constexpr +constexpr
@@ -8981,7 +8995,7 @@ Variables -constexpr +constexpr
@@ -9010,7 +9024,7 @@ Variables -constexpr +constexpr
@@ -9039,7 +9053,7 @@ Variables -constexpr +constexpr
@@ -9068,7 +9082,7 @@ Variables -constexpr +constexpr
@@ -9097,7 +9111,7 @@ Variables -constexpr +constexpr
@@ -9126,7 +9140,7 @@ Variables -constexpr +constexpr
@@ -9155,7 +9169,7 @@ Variables -constexpr +constexpr
@@ -9184,7 +9198,7 @@ Variables -constexpr +constexpr
@@ -9213,7 +9227,7 @@ Variables -constexpr +constexpr
@@ -9242,7 +9256,7 @@ Variables -constexpr +constexpr
@@ -9271,7 +9285,7 @@ Variables -constexpr +constexpr
@@ -9300,7 +9314,7 @@ Variables -constexpr +constexpr
@@ -9329,7 +9343,7 @@ Variables -constexpr +constexpr
@@ -9358,7 +9372,7 @@ Variables -constexpr +constexpr
@@ -9387,7 +9401,7 @@ Variables -constexpr +constexpr
@@ -9416,7 +9430,7 @@ Variables -constexpr +constexpr
@@ -9445,7 +9459,7 @@ Variables -constexpr +constexpr
@@ -9474,7 +9488,7 @@ Variables -constexpr +constexpr
@@ -9503,7 +9517,7 @@ Variables -constexpr +constexpr
@@ -9532,7 +9546,7 @@ Variables -constexpr +constexpr
@@ -9561,7 +9575,7 @@ Variables -constexpr +constexpr
@@ -9590,7 +9604,7 @@ Variables -constexpr +constexpr
@@ -9619,7 +9633,7 @@ Variables -constexpr +constexpr
@@ -9648,7 +9662,7 @@ Variables -constexpr +constexpr
@@ -9677,7 +9691,7 @@ Variables -constexpr +constexpr
@@ -9706,7 +9720,7 @@ Variables -constexpr +constexpr
@@ -9735,7 +9749,7 @@ Variables -constexpr +constexpr
@@ -9764,7 +9778,7 @@ Variables -constexpr +constexpr
@@ -9793,7 +9807,7 @@ Variables -constexpr +constexpr
@@ -9822,7 +9836,7 @@ Variables -constexpr +constexpr
@@ -9851,7 +9865,7 @@ Variables -constexpr +constexpr
@@ -9880,7 +9894,7 @@ Variables -constexpr +constexpr
@@ -9909,7 +9923,7 @@ Variables -constexpr +constexpr
@@ -9938,7 +9952,7 @@ Variables -constexpr +constexpr
@@ -9967,7 +9981,7 @@ Variables -constexpr +constexpr
@@ -9996,7 +10010,7 @@ Variables -constexpr +constexpr
@@ -10025,7 +10039,7 @@ Variables -constexpr +constexpr
@@ -10054,7 +10068,7 @@ Variables -constexpr +constexpr
@@ -10083,7 +10097,7 @@ Variables -constexpr +constexpr
@@ -10112,7 +10126,7 @@ Variables -constexpr +constexpr
@@ -10141,7 +10155,7 @@ Variables -constexpr +constexpr
@@ -10170,7 +10184,7 @@ Variables -constexpr +constexpr
@@ -10199,7 +10213,7 @@ Variables -constexpr +constexpr
@@ -10228,7 +10242,7 @@ Variables -constexpr +constexpr
@@ -10257,7 +10271,7 @@ Variables -constexpr +constexpr
@@ -10286,7 +10300,7 @@ Variables -constexpr +constexpr
@@ -10315,7 +10329,7 @@ Variables -constexpr +constexpr
@@ -10344,7 +10358,7 @@ Variables -constexpr +constexpr
@@ -10373,7 +10387,7 @@ Variables -constexpr +constexpr
@@ -10402,7 +10416,7 @@ Variables -constexpr +constexpr
@@ -10431,7 +10445,7 @@ Variables -constexpr +constexpr
@@ -10460,7 +10474,7 @@ Variables -constexpr +constexpr
@@ -10489,7 +10503,7 @@ Variables -constexpr +constexpr
@@ -10518,7 +10532,7 @@ Variables -constexpr +constexpr
@@ -10547,7 +10561,7 @@ Variables -constexpr +constexpr
@@ -10576,7 +10590,7 @@ Variables -constexpr +constexpr
@@ -10605,7 +10619,7 @@ Variables -constexpr +constexpr
@@ -10634,7 +10648,7 @@ Variables -constexpr +constexpr
@@ -10663,7 +10677,7 @@ Variables -constexpr +constexpr
@@ -10692,7 +10706,7 @@ Variables -constexpr +constexpr
@@ -10721,7 +10735,7 @@ Variables -constexpr +constexpr
@@ -10750,7 +10764,7 @@ Variables -constexpr +constexpr
@@ -10779,7 +10793,7 @@ Variables -constexpr +constexpr
@@ -10808,7 +10822,7 @@ Variables -constexpr +constexpr
@@ -10837,7 +10851,7 @@ Variables -constexpr +constexpr
@@ -10866,7 +10880,7 @@ Variables -constexpr +constexpr
@@ -10895,7 +10909,7 @@ Variables -constexpr +constexpr
@@ -10924,7 +10938,7 @@ Variables -constexpr +constexpr
@@ -10949,7 +10963,7 @@ Variables -inline +inline
@@ -10963,7 +10977,7 @@ Variables
-template<typename T >
+template<typename T>
@@ -10974,7 +10988,7 @@ template<typename T >
-staticconstexpr +staticconstexpr
@@ -10989,7 +11003,7 @@ template<typename T >
-template<typename T >
+template<typename T>
@@ -11000,7 +11014,7 @@ template<typename T >
-staticconstexpr +staticconstexpr
@@ -11010,10 +11024,13 @@ template<typename T >
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.js b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.js new file mode 100644 index 000000000..06d88c005 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h.js @@ -0,0 +1,358 @@ +var backend_2metal_2kernels_2metal__3__0_2bf16_8h = +[ + [ "_MLX_BFloat16", "struct___m_l_x___b_float16.html", "struct___m_l_x___b_float16" ], + [ "_MLX_BFloat16::bits_to_bfloat_struct", "struct___m_l_x___b_float16_1_1bits__to__bfloat__struct.html", null ], + [ "metal::_numeric_limits_impl< bfloat16_t >", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4" ], + [ "bfloat_binop", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707", null ], + [ "bfloat_binop_base", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a78c92beda4436da9a2e520fa98c59f70", null ], + [ "bfloat_binop_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac7ff36230dab17e8f17b7a7c80888594", null ], + [ "bfloat_compop", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a330a0883503cb640f1cf628a7ca50239", null ], + [ "bfloat_inplace_op", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ac82467fbc674e990090f482b9c1e5c", null ], + [ "bfloat_inplace_op_addr_space_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1457da931c28fa4e2500daa4e6441e8b", null ], + [ "bfloat_inplace_op_addr_space_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af30a2cbd2c3415516203b83bd21872f8", null ], + [ "bfloat_inplace_op_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afe5988aa8147be2bafda6a5b7792fe15", null ], + [ "bfloat_inplace_op_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2846fd11b5e19b435e9f7ef0998c9b1d", null ], + [ "bfloat16_t", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82", null ], + [ "bfloat16_to_uint16", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088", null ], + [ "bfloat_bits_to_float", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3b33ae338dc4f223d0f3c748de07bad1", null ], + [ "float_to_bfloat_bits", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31ce5e8e860295fa236e0d4b0befeae1", null ], + [ "metal::isnan", "namespacemetal.html#a83320ba983d90dd1fa5847b6940dc0bb", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afc6e4fc5589bbf30f978f34868dd4e55", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6baa722c22d66c7510786bb275cb8cc2", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa504a474ab6e00ebe2b1b7ed2f7d1ffb", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a347c9bbf816bad2e9e5e91aa448f8b65", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa6b99cde403405df1865c989e4ce845a", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2bbdcece13148826d3fe33af727bb79b", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3602117b4c61d5cd4fd72fb8e5f68bd6", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa8d9f01582a0a9f01a666d110c74db2a", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abf5f3040227f021a5b84cf2eda248b2f", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a33ea086b561c652f25833a5e1ded34dd", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a204d13a881ae8d337f6efbb98673790c", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeb1efa47c5f22cc0b35d49ccce73c406", null ], + [ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2721c088adfc9d73cde442d6badd2a6c", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8f06316063fc91747533105f256b55b5", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7b3bce3f6f17089d87e13e91f580a581", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a852689073c17596de4fb545bc046b380", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6278bd2e0e2805090b33ef666bf7f6bb", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1a559ab88dbbb4fd2c7509d2c94e55b", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7cd44d27fa9a4f13df39894c34fdb348", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a87ab4b7a502430da664ccb8abd383058", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a54ae7216b82c5cea362f6b83e1df3a9b", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a168300bbd04d8e97c5e4218cb14ae378", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aecf703522d9ce32dfeefe1e6e903db06", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a495ae2d9be5d97c4c6448fc4e50a03e1", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee64dc1890abb6d1035361cb8c751f96", null ], + [ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5f997839cf49c24ab594a0dff486a7bc", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a13aa79165ec87710e977f33fe0361e91", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7232b0a0e193b3c6172d6fc2578bf419", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab706af260b61f735b28464877d02137c", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a81f65b04a87a25c7eb1a751d1be9fa55", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae97ab6c3ddcc2754b24f86319a5398be", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a917354f77eac26189da8a2f610a00074", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a99aa4cc110d1c7aa3b4c8c5cbf9235b7", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeff4c28986f98c23de1df17043edb0f5", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1a2a683ff40490226eb1371fb905023d", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ade65ebca11e38d56408c512df89b99f4", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a979374b1dd4e0eaf602326fa901336d1", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08c1f916302eb9d48c93f8b7260538fe", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3ff4ff59f411010ac8502cfabda4bd6f", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af725f935bfa0405e5ff17ede3ac47283", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2179abbc91ce8763e96e39e1917bfa6e", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7dbf0c75df4817cb4ef8b60c417a89d0", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4126fb7ed5bbb27a2332c543cf56a337", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3796dcf819adb1ef8152f57ba63ff6b1", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af4348ce3425dd99d069e8fdf06e25a3c", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac815eec2c1b15a47b1c6ea6790e77d24", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc8e82b8f593b12c6d405e2250ab0f62", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abd3d82e2dec1847e97eb8fc3bab2985a", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7c56980c234a04260b8b19298085e526", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab070ea4676d10a10ff3e9379a4068a57", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a323a80492cd17a49e2c3dd18f8c8b5cc", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab092d9790ef20fc0386707530aee89db", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2c3c5f793b3d957d7295d7f1faabebee", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8110fae7bcc34a0de5927546b24aa935", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4611728172afea51860a77fdb06cafa0", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a738078eb7d5ff94ff48156a555d763a5", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab840ff9de0cdd0e9afffb8baa2a850a3", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0197e039d4c65bf49649a6f250c2d436", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adb465776d3868bda0525d632ffc4d129", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abff1fd2439e31e6e64a3d2fdee3c7821", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aaab79d0b4c9e9bdc059ace6ec58c5b00", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac66657077d55e94197b52b63acb50b7d", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae4acef3e7ae7dfe359422503f894e885", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0b8736e2ae24758b6e24ea72668df5b4", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a435f2f4256aadb1b57fd62bb7f733cf7", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a73416a7415f3fe31525e33419e5e8aab", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad3565cc6fd1e088d052b1108aa065851", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a12a98d71d670b409b8065e0d61672d55", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a625dcb133f1f953f263e6200399866c6", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a383165ea838cc3feeee4d9cf54aa77cc", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc268cdbc30500f3009f5de2b2f0f67a", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad920df9579603f0b0ee2689eba330617", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0e4377b120d6305335d296e031ee5b30", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a16978f4b16d954ef4d4cf0f32f6c0b94", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a711693988c437c2fb4d7da505982fe21", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5d00eb2ec2b0e15b2753d100694c45ae", null ], + [ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08b6071245513e1726ec68e3b63edc53", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a09c1a797eb7f43742578680899932f50", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a551b970f73bb4a3b287653021d000b60", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8b6c3fd9d068a2159084359df8b9b449", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa415ce182fe7582d885fe633fc3527ce", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a006763fae6e0577fc168ec9446f0f747", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab43932322f81bf322aa1b0deeee9a987", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af87dfa2122e9c76042dc41fb7f338a87", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a43a225e7e548bb041f3a5d844faaf0da", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0a5bfe15d95ba540795f4c25ebfa4f07", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a62f891b7dbba0000749cf338f594bedb", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a12a47e8ac0be788edff57ae0a96d7830", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acd15d46ea5827a2a39898ccbb8352eb8", null ], + [ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af2737d09c887ee8cd43fdeabceddbe82", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24ca436ab299a710263d65302532dd3b", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab04f480aea9fbba0895068c7558dd400", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae0c70198e236ffe1a98f79987c686419", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab93ce536eb7998bee00de4af868e31a9", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a15573fefd880adefbba079b1c1bd8082", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac45e9ca0c7155caebe3d0f7261518077", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af5713afb3a62967a02c3c20661951ee4", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4dd3cf0e5aa116ff330352a50c18cde7", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a77bab4481b41be50297b257e95058706", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a251780ac4592cc2b1a543e417ff57770", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a13b3338935440ae51ecc4a356093efc5", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad0ae9e2b4874f991a2c853e1c1fe735d", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a104cf94cb9e359d1b6ef92ced2ce0c27", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3c62ac679d6aa515144d40ebafe4a188", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7f1b84352a3ed6171444a43da1fc7e92", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afb9a0e18c0e40c77e6143fb7d84ebfba", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7816a97d16b1d2f8a90227bb1da2f6ac", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee1bdf0ab2e445293708b476e8cfde3b", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24381d991c2d570aa953694f396a69b5", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a0cb8544b4ebd2906ba8e7f2868e8de", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a194a6670cc25ade35a24b566f31af785", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa04cfcb52191fd23205a1a3572b46ae0", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9ff5ab3aef1057fa083b53a65c8aba03", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af1983edd26245e6e51c6e47354095e32", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adf0cfd9a608a6fb3d57933e32e7d81d2", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac244d140c6149726ea44174d3e836ca3", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7595740d4cc12924905d6bd1b99ee4da", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7b134429ea0c8493800ff8b465410f9c", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3d0d689516c99003659c5d026847bd2e", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad684bc2ae1a2a627cd3e4a4c641e2d77", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae74bb0a3c12cd1a23f3d29ce307d6fb1", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8cd55d1a579540eb450e12a8a8a950be", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4bd92db6c8b9b5dc96332c7ae3eff8c7", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af802541c4c65ee4442acd495de4d27fe", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a190e27077f0fba642a86f5c8f488bcc2", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac1498acb8c3623b5f412f70ab6a6528b", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4154f90ab7857ca856f9e15fe1bf5acf", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a007f58508b98bb79e5c323ed0dec89b6", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1e28448e35f4934075b397c34ba3d66", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac188bd19f236b098d603b0d8acd08921", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a588ef0f7e03f306758524d378278976f", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5d628a5bc4fa755610392f47a523a1f1", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac06eb2fea47a09a8a8abdaa1aa9b4603", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abce5ab327110c164f054b43ed47f79a0", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab9ae6a51e2027b02cac9966e05f3ba68", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa7198e580e2a83c1fd01a4b6fdf86a80", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8ad16afd7f1711de83c0cec5af868f76", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef9fa600d107b509f2e3df7d6b080e01", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a74751abec7086f85f4f26ced44f1ca1f", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7c790442f77f2437b482c4a55e224fc3", null ], + [ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5263b2463fecdc97f9521d00bffea059", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a333f67614dbf8027439a7e124052cb85", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a891aa4bf46c20a26a55061736aba25f1", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af69ef8f1d8ecae0e6f755bf1c46cf075", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab02f8646b47806e1d2038f248df03f06", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab789f8a400512ff27e36b3373170f0c5", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5868c85c988ec3432cf86d7df40e464d", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a152366ab4e2ccc867e919af6c74ced91", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6aedc8d6d0980134ac69b96f22d9a855", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7ad7ff44a3200853711869f7a577d931", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5bd875a54b79b2dcedf674807c3e53c5", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab27b26182c7c6e08af37e6d511fd9253", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7f601b22ecc480132d82ad782e5363bf", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad03ef47e6cc7521bbfb45740dee20f88", null ], + [ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a42bead8ef0beb9f3452128d64cd4df9d", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0d3fb52437c677c5d0f1a3642384b15c", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab225043bd02bb423930bc98aae9c2bca", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef62c7e3e494b6a511a7833c0d942a60", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7167343d90eb70e5a0d5fa9ec5398e94", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9d06cceea5c179bcc608452188bd7d6a", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afb3cd302e0b78902c62111dce4494fe8", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab155f418f15cabd86ff942c6f9472ddb", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9a837c3b9c4e42f53d7cd1ed0d266e2f", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1dac193d9f1c8c0eb4473441895f8c58", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac2f1e1f2365cfa531b1519aa9ff67695", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad30726cc8b69fd300d33c2a46e123c28", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9b31c363ebc93d592b6fa0e27b00335a", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0aa9ffe056f49fda181bbacbd60556ea", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abb884888f14086cc674657677cb4b8bc", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aaa66dc6d7b2c5efbfaa97ca9c7872bd8", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acf7af2284269544064b68e807064bba4", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad2817d53fdd4b112babfb6f0b38c8f39", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adda64cae388baac1f138b06dc8595237", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a513501355a5912a1263fd8b10864142b", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8859b5b8dc241e4f58243c85d2630cc8", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a967a1d7b5664f616e5b6f2d257367f0c", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ada5685d99c2d6708d1c4ef826d68e879", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a38bb89f925eca4f9c042f6ee7a2c0193", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a696978d9401e09200045b2d8aad045c2", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a28d297705e29009197418546ef435393", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa705d87cf4b78e9d7c6b07dd0c66cac6", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab4f4ecd62c3d8b3363d02019573dc9f1", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7003e1e5881e3d106257f22b6a3e59fe", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aff19193e1b2cee29a8737318e95cc74a", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a726cecf778b8584b6f7c37db1b064576", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac30c580713f354916088a7dc049ae4cd", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae998d8f423a9fb73405cfbd4b836bc72", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a948579a4d9ba276523190b03b09578fb", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a542affc376726840647a6e93acf2c1a7", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af20874a61c6c3f4c3fd045a96e806644", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a92d1348f201d78fcd474f75d5b23ef68", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3165e37d393be50c2cfa9ddcba153684", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aede0cc4179507b739849948f1a2fed4b", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3816a35f8468156d59c239256c12dcf3", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a715c824ee8c87e0256114a85624d9949", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a279d09ab8542f1c1a8dc8173b65946b6", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a4b98a0a11db5b77cf9168df37c8bc7", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#add18cfe4c0d38e95c6dff6bab3e7a932", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3eefe9a7f5fb226335ea687012f32d5c", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a76f5bd895b7214cbc3cea3440992718a", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e1a6056f9c96f3c89fe204dbf103be5", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa332fae098e7c6dc23b98bc0026f1070", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7bc91aaaf476a37063264d1d53d862cc", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a491dadfae957cd7cc0c36188d910f6f6", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31a3d8f2ff8038f7e0d717845c039808", null ], + [ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab1de7e7e7304ff3598925d2e69134764", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9f16a44e1c9836ca57edc1d7b93b5d7c", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aacaedf12f862c76457133336dd6fc446", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad8f7b11669736fbd6ed2e28211d877d4", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8c8ac6736440fdca366ebdefe2a12b9f", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad6399ba2b8708899739b4cdbb44add8d", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4720cc79ab2b8e39952ea9ef20e51250", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa3277ae33976c70f7bd937ddff027b72", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a584a513596de20663dad951a5b81695e", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a59515695ebc48844345fa5120511aed1", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad6859b04680d0d26d75fd6c4dd74ee24", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a998b1ba877a606aedf722ab46b290403", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a72d10ec0e62949247da129eb3a83fb9b", null ], + [ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa708a970a200822c99c0489f389469fa", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af1a12a1efb618a57da6dd41ae18cb53c", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5aa3b8c68a2b58d41ea33eaabbf83095", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a744f72ba83522fe3cc2a49a007b42543", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab933bc3cdf9adfea10ab9dba5292c812", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a64f1136b17006f168ef837e17240814f", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9f835a0a80c411580c97b65fdc5bdfd3", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a44522c2304c6396bbe6b9d32000f4b6f", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc9f32cc6f40768df4285fba2e4783c7", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4358ee606e66ba2081fcf94f9c3b5915", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a90a1c5130db515db48624d8587edbb91", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a77c678665b34df7652dcde053ca73185", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a25e7c5d2ecf3375756d59074f333858f", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae46d75b8046d557452d74513f1106710", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a17f47ec9cff60f8e1b3477a2793b7ac0", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef8e7e499ea9d432aa743d83c076f945", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae71f66d814a03f6377c9d86cf0a2b5d7", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1e7ef6f065695d4b1d017547b60ef62", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a94686039356dfa9aa45608a8b0562fdc", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a65f30a2dc199134e35bc7c5d431b2263", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae0614b6b199d8a65ae95d4621b118b82", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ae4a80fde67eea9a0a37b2803946544", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08d2460e259b9106d90d889481ad60d5", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5be23e296bbed3a885586a6424b1666e", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3a0a3edbf1ba2314551454059c3f422b", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad0125b6baba3065a87a174ec27aa9a61", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a284dfc702f0f67b9c233b87162eeabdd", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7172d84db640e6c49dff0d08dd64b53e", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa846fde89c7d2d18b18ef180a8a9c8a3", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a912393b7208fa45bd1e87f30b218b68b", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f7fd418408806ef498745c6fdb2c062", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afba39221eb54e272aae79910b3cd7ef5", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acb9f0aef9fbdfde8a4f46e33b0d6c52f", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5cc74ad3e522d7104e6e2117751151ad", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab8f211ea896fc5190004f3ad6ad8932f", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa251d6483d3b099d1b5311fbe6f0bce2", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acf7cb9927bf09022088401923f2e1916", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08e778be18e4a291c108fcc528b981d3", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a18963246f2b640874bef6dca7049f64d", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac703495cb370b52526a5a2d36ae26038", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac057d95a2bf087575584aa6f9a2c6bf5", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a303dfcc81ffd355f866f863d7d9f0fa5", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab3b594321fb42b0c2da99954d1e0976c", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e1bcf3bc06cbcbc304c0cdf729802bc", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a86b2a001cbec0d3a8d762a3c7ff47b0b", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6b9e49ad9ea256d2d0220c0d81552602", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0e2c2c2cb50b3a55ff213f18978aca35", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ca11d43174baf0a729f93b35eabcbea", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab986ae2cec780a1f494b7b4468b7ba11", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a359edd4bcb8776861ceb26a3005624c0", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4a0023e2fd08875156cd6ef747fbb5cd", null ], + [ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abbe42648a46092137b303ccd08f7df86", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9ef6a57b7185e9ca49e255fec1a44e25", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aab02c65bc38ea66335b2192ead4095a8", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2486f3b5de85b0d57f458d8f21f82b42", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abdd04257e6a73883b5f56f1186d0e906", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0736a76f56578d26ba1422dc8b744a18", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a501cc01d5bf15d9f03aa28545f9624ea", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af80ff2020ec2c4b406c5fdae3fe55e63", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae91686513e284bcc9635833744bbdda1", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a435a2aec4c777b4b184ff5d24992e8a1", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a69984aaa05ae1d4fccccf7f57e8ecb4a", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24b1fa8998c892f90f8dde7c34fb10a5", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1b029e4ca72125a5f9471f582c819705", null ], + [ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac03f6eefb836373d37dc280b0d813d78", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af469c58cffeab488c681f4b33f02cd05", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a81eae168dfafd299c2b94e3e8558cf", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acba9efe192d22b7781b4622103c7a944", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7eac96f64ca42991caf819c8e8c8d2bc", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a28f8d21c5eef047c701cf690ce9c2ef0", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08c7d12a0d16565fbf052dba2db8b22d", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f360806708b95a3be400af0b8871b57", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f486bf02c6ad5b9b6a96d3450f03e47", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aff100489cc40ad276c2d5d67a9df67db", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a88c11cd37600de5480570da3d2ae5732", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a14b56c687053ee2432398a25663c068f", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2b9de9624c0a507b4ead85f898ad9daf", null ], + [ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a80d288f22cadfdf5e904410349e616a1", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a49a13b06a325ed3cca4004b6a0cde065", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0aa3bfcfab53700488e5f386e6de60d5", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae753526b669fba27771089dc809abd66", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae86f5917847b1ec9f313996250f2e0be", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa5fa1a8f2b39c3508fe38205469756d1", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac30a2c1fa6f172af903fdeb6a8632606", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3ae2091ada1e39e857fbc53c97bdb79f", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3936148781ab1c4f33f58d12c116f370", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a05a4f197a71d0f16879032f44492bb79", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aab74ec4d33a64b92b908717d500f1ecf", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeadc1f36c6bdc219294ce9341d80afa5", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab4e9ad547aa23daa351075e0ecc58fa2", null ], + [ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac7b4d295f3c7b1e09964f24f306422da", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae394c0a10e47d1d047854a888402eb57", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab9cd098786d2f4c855c42e4a6f30ab3e", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afd7cdb8ed2a9820efe9cf322c06f188c", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a68125e66f74eaffe5ea9267638ce870d", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a41d55d167e9dc63bf29d15e0ff004869", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a74e477567c9477c2cf0684f81ef4498f", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2826bd301bb5393473ccd363f2052c0d", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a55600f3b9859e2891e0e0b5690867b72", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31bbdbe0b62b90a4d6ea4bb0a7db586b", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac89eb6b29edad8cca63727ab97171c29", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa95f9ebfdab3c5f524775651362ce914", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2d37130b6fd79b425f5ba92b65e36bed", null ], + [ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a62a512d0edd894759c69f724b970fbdb", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a430dd11fbf4c6f39bc1506ab43b2341f", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a64f6787a96386246f83a8981d274150e", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae88617c4a012c5dc12781a349a28c886", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9e21c5ea9dd724dc2ca8c54ad908f09c", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2807fa6862b0f9689c81199b1e695ed8", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abec53064aa96265385ecc57de5fbc74c", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a523eda93c809733368e2b45382d2add6", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1a788f82212afad30e4c2ee40f1c313c", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a467a88531150a4d9d30fce07c49c126e", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2f6286d222e2176bcbdc824c5d598100", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee3ae0d0d1f941463b06eca0bf041b2b", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac766839f8f9e4863e8e18418c342c875", null ], + [ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1f4e90909ac1c7280f4c7d1977c55fb7", null ], + [ "uint16_to_bfloat16", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4", null ], + [ "can_convert_from_bfloat", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e5992f7fcd8f2cdadcc1d7f6aefbb5a", null ], + [ "can_convert_to_bfloat", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aae77817d261452b2f001f4d947a3e04e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h_source.html b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h_source.html index 9c4dd6bcd..76a2d5932 100644 --- a/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__0_2bf16_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_0/bf16.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
bf16.h
@@ -98,7 +112,7 @@ $(function(){ initResizable(false); });
5#include <metal_stdlib>
6
7using namespace metal;
-
8
+
8
10// Helpers
12
@@ -135,17 +149,17 @@ $(function(){ initResizable(false); });
40template <typename T>
41static constexpr constant bool can_convert_from_bfloat =
42 !is_same_v<T, _MLX_BFloat16> && is_convertible_v<float, T>;
-
43
+
43
45// Bfloat struct
47
- +
50 // Constructors
51 uint16_t bits_;
52 _MLX_BFloat16() thread = default;
-
53 _MLX_BFloat16() threadgroup = default;
-
54 _MLX_BFloat16() device = default;
-
55 _MLX_BFloat16() constant = default;
+
53 _MLX_BFloat16() threadgroup = default;
+
54 _MLX_BFloat16() device = default;
+
55 _MLX_BFloat16() constant = default;
56
@@ -157,7 +171,7 @@ $(function(){ initResizable(false); });
61 constexpr METAL_FUNC _MLX_BFloat16(uint16_t bits, bits_to_bfloat_struct)
62 : bits_(bits) {}
-
63
+
63
65 // Conversions to bfloat
66
67 template <
@@ -191,7 +205,7 @@ $(function(){ initResizable(false); });
88 constexpr METAL_FUNC _MLX_BFloat16(T x) constant
89 : bits_(float_to_bfloat_bits(static_cast<float>(x))) {}
-
90
+
90
92 // Conversions from bfloat
93
94 template <
@@ -231,16 +245,16 @@ $(function(){ initResizable(false); });
121};
-
122
+
122
124// Bfloat operators
-
126
+
126
128// Unary ops
129constexpr METAL_FUNC _MLX_BFloat16 operator-(_MLX_BFloat16 x) {
130 return -static_cast<float>(x);
131}
-
132
+
132
134// Binary operators
135#define bfloat_binop_base(__op__, __operator__, otype, atype, btype, ctype) \
@@ -258,7 +272,7 @@ $(function(){ initResizable(false); });
145 return static_cast<ctype>(lhs) __op__ static_cast<ctype>(rhs); \
146 }
-
147
+
147
149// Arithmetic Operators
150#define bfloat_binop(_op_, _operator_) \
@@ -276,7 +290,7 @@ $(function(){ initResizable(false); });
161bfloat_binop(-, operator-);
162bfloat_binop(*, operator*);
163bfloat_binop(/, operator/);
-
164
+
164
166// Comparison ops
167#define bfloat_compop(__op__, __operator__) \
@@ -301,7 +315,7 @@ $(function(){ initResizable(false); });
185#undef bfloat_binop_base
186#undef bfloat_binop_helper
187#undef bfloat_binop
-
188
+
188
190// Inplace Operators
191#define bfloat_inplace_op_helper(__op__, __operator__, itype, addr_space) \
@@ -364,11 +378,11 @@ $(function(){ initResizable(false); });
243
244#undef bfloat_inplace_op_helper
245#undef bfloat_inplace_op_addr_space_helper
-
246
+
246
248// Bfloat typedef
250
- -
252
+ +
252
254// Bfloat numeric limits
256
257#pragma METAL internals : enable
@@ -377,58 +391,58 @@ $(function(){ initResizable(false); });
260
261template <>
-
262struct _numeric_limits_impl<bfloat16_t> : _fp_numeric_limits_impl_base {
-
263 static constexpr constant int digits = 8;
-
264 static constexpr constant int digits10 = 2;
-
265 static constexpr constant int max_digits10 = 4;
-
266 static constexpr constant int radix = 2;
-
267 static constexpr constant int min_exponent = -125;
-
268 static constexpr constant int min_exponent10 = -37;
-
269 static constexpr constant int max_exponent = 128;
-
270 static constexpr constant int max_exponent10 = 38;
+
262struct _numeric_limits_impl<bfloat16_t> : _fp_numeric_limits_impl_base {
+
263 static constexpr constant int digits = 8;
+
264 static constexpr constant int digits10 = 2;
+
265 static constexpr constant int max_digits10 = 4;
+
266 static constexpr constant int radix = 2;
+
267 static constexpr constant int min_exponent = -125;
+
268 static constexpr constant int min_exponent10 = -37;
+
269 static constexpr constant int max_exponent = 128;
+
270 static constexpr constant int max_exponent10 = 38;
271
-
272 static constexpr bfloat16_t min() {
+
272 static constexpr bfloat16_t min() {
274 }
-
275 static constexpr bfloat16_t lowest() {
+
275 static constexpr bfloat16_t lowest() {
277 }
-
278 static constexpr bfloat16_t max() {
+
278 static constexpr bfloat16_t max() {
280 }
-
281 static constexpr bfloat16_t epsilon() {
+
281 static constexpr bfloat16_t epsilon() {
283 }
-
284 static constexpr bfloat16_t round_error() {
+
284 static constexpr bfloat16_t round_error() {
286 }
-
287 static constexpr bfloat16_t infinity() {
+
287 static constexpr bfloat16_t infinity() {
289 }
-
290 static constexpr bfloat16_t quiet_NaN() {
+
290 static constexpr bfloat16_t quiet_NaN() {
292 }
-
293 static constexpr bfloat16_t signaling_NaN() {
+
293 static constexpr bfloat16_t signaling_NaN() {
295 }
-
296 static constexpr bfloat16_t denorm_min() {
+
296 static constexpr bfloat16_t denorm_min() {
298 }
@@ -445,13 +459,13 @@ $(function(){ initResizable(false); });
306
307#pragma METAL internals : disable
-
308inline uint16_t bfloat16_to_uint16(const bfloat16_t x) {
+
308inline uint16_t bfloat16_to_uint16(const bfloat16_t x) {
309 return x.bits_;
310}
311
-
312inline bfloat16_t uint16_to_bfloat16(const uint16_t x) {
+
312inline bfloat16_t uint16_to_bfloat16(const uint16_t x) {
314}
@@ -462,6 +476,7 @@ $(function(){ initResizable(false); });
#define bfloat_inplace_op(itype)
Definition bf16.h:208
constexpr METAL_FUNC _MLX_BFloat16 operator-(_MLX_BFloat16 x)
Definition bf16.h:129
#define bfloat_binop(_op_, _operator_)
Definition bf16.h:150
+
struct _MLX_BFloat16 bfloat16_t
Definition bf16.h:251
static constexpr constant bool can_convert_from_bfloat
Definition bf16.h:41
bfloat16_t uint16_to_bfloat16(const uint16_t x)
Definition bf16.h:312
static constexpr constant bool can_convert_to_bfloat
Definition bf16.h:37
@@ -478,20 +493,31 @@ $(function(){ initResizable(false); });
constexpr METAL_FUNC _MLX_BFloat16(T x) device
Definition bf16.h:82
constexpr METAL_FUNC _MLX_BFloat16(T x) threadgroup
Definition bf16.h:76
constexpr METAL_FUNC _MLX_BFloat16(T x) const ant
Definition bf16.h:88
+
static constexpr constant int digits10
Definition bf16.h:264
+
static constexpr constant int min_exponent
Definition bf16.h:267
+
static constexpr constant int max_exponent
Definition bf16.h:269
static constexpr bfloat16_t infinity()
Definition bf16.h:287
static constexpr bfloat16_t denorm_min()
Definition bf16.h:296
+
static constexpr constant int max_exponent10
Definition bf16.h:270
+
static constexpr constant int max_digits10
Definition bf16.h:265
static constexpr bfloat16_t max()
Definition bf16.h:278
static constexpr bfloat16_t epsilon()
Definition bf16.h:281
+
static constexpr constant int radix
Definition bf16.h:266
static constexpr bfloat16_t signaling_NaN()
Definition bf16.h:293
static constexpr bfloat16_t min()
Definition bf16.h:272
static constexpr bfloat16_t lowest()
Definition bf16.h:275
+
static constexpr constant int min_exponent10
Definition bf16.h:268
static constexpr bfloat16_t quiet_NaN()
Definition bf16.h:290
+
static constexpr constant int digits
Definition bf16.h:263
static constexpr bfloat16_t round_error()
Definition bf16.h:284
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.html b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.html index 628c1311f..01bd6ceb2 100644 --- a/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_1/bf16.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Typedefs | @@ -144,7 +158,7 @@ Functions -inline +inline
@@ -169,7 +183,7 @@ Functions -inline +inline
@@ -177,10 +191,13 @@ Functions
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.js b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.js new file mode 100644 index 000000000..cc947d5f4 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h.js @@ -0,0 +1,6 @@ +var backend_2metal_2kernels_2metal__3__1_2bf16_8h = +[ + [ "bfloat16_t", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e", null ], + [ "bfloat16_to_uint16", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088", null ], + [ "uint16_to_bfloat16", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h_source.html b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h_source.html index 8f9809902..629d6dd18 100644 --- a/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2metal__3__1_2bf16_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_1/bf16.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
bf16.h
@@ -99,28 +113,30 @@ $(function(){ initResizable(false); });
6
7using namespace metal;
8
-
9typedef bfloat bfloat16_t;
+
9typedef bfloat bfloat16_t;
-
10inline uint16_t bfloat16_to_uint16(const bfloat16_t x) {
+
10inline uint16_t bfloat16_to_uint16(const bfloat16_t x) {
11 return as_type<uint16_t>(x);
12}
13
-
14inline bfloat16_t uint16_to_bfloat16(const uint16_t x) {
+
14inline bfloat16_t uint16_to_bfloat16(const uint16_t x) {
15 return as_type<bfloat16_t>(x);
16}
+
struct _MLX_BFloat16 bfloat16_t
Definition bf16.h:251
uint16_t bfloat16_to_uint16(const bfloat16_t x)
Definition bf16.h:10
-
bfloat bfloat16_t
Definition bf16.h:9
bfloat16_t uint16_to_bfloat16(const uint16_t x)
Definition bf16.h:14
Definition bf16_math.h:226
-
Definition bf16.h:48
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.html b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.html index 7feb28464..2b6e28786 100644 --- a/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/reduction/ops.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -157,7 +171,7 @@ Variables
return val; \
}
static constant constexpr const uint8_t simd_size
Definition ops.h:22
-
uint64_t simd_shuffle_down(uint64_t data, uint16_t delta)
Definition utils.h:346
+
uint64_t simd_shuffle_down(uint64_t data, uint16_t delta)
Definition utils.h:335
@@ -177,7 +191,7 @@ Variables -staticconstexpr +staticconstexpr
@@ -185,10 +199,13 @@ Variables
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.js b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.js new file mode 100644 index 000000000..cb4e919a8 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h.js @@ -0,0 +1,13 @@ +var backend_2metal_2kernels_2reduction_2ops_8h = +[ + [ "bool4_or_uint", "unionbool4__or__uint.html", "unionbool4__or__uint" ], + [ "None", "struct_none.html", "struct_none" ], + [ "And< U >", "struct_and.html", null ], + [ "Or< U >", "struct_or.html", null ], + [ "Sum< U >", "struct_sum.html", null ], + [ "Prod< U >", "struct_prod.html", null ], + [ "Min< U >", "struct_min.html", null ], + [ "Max< U >", "struct_max.html", "struct_max" ], + [ "DEFINE_SIMD_REDUCE", "backend_2metal_2kernels_2reduction_2ops_8h.html#acacf99e0ba629ed062ccc3c2eba89b05", null ], + [ "simd_size", "backend_2metal_2kernels_2reduction_2ops_8h.html#a515b75d563a93d3c09ee677948dc83e3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h_source.html b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h_source.html index 35b73c8b1..e8e93d72d 100644 --- a/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2reduction_2ops_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/reduction/ops.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
ops.h
@@ -278,7 +292,7 @@ $(function(){ initResizable(false); });
168 return simd_min(val);
169 }
170
-
171 static constexpr constant U init = Limits<U>::max;
+
171 static constexpr constant U init = Limits<U>::max;
172
173 template <typename T>
174 void atomic_update(device mlx_atomic<T>* out, T val, size_t offset = 0) {
@@ -302,7 +316,7 @@ $(function(){ initResizable(false); });
190 return simd_max(val);
191 }
192
-
193 static constexpr constant U init = Limits<U>::min;
+
193 static constexpr constant U init = Limits<U>::min;
194
195 template <typename T>
196 void atomic_update(device mlx_atomic<T>* out, T val, size_t offset = 0) {
@@ -325,7 +339,8 @@ $(function(){ initResizable(false); });
static constant constexpr const uint8_t simd_size
Definition ops.h:22
#define DEFINE_SIMD_REDUCE()
Definition ops.h:8
Definition ops.h:37
-
Definition utils.h:23
+
static const constant U max
Definition utils.h:24
+
static const constant U min
Definition utils.h:25
Definition ops.h:185
b a
Definition ops.h:202
Definition ops.h:163
@@ -339,10 +354,13 @@ $(function(){ initResizable(false); });
bool4 b
Definition ops.h:25
unsigned int i
Definition ops.h:26
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.html b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.html index 9e8b79ebe..05643cf17 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/transforms.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -119,10 +133,13 @@ Namespaces  
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.js b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.js new file mode 100644 index 000000000..78d9e2f69 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h.js @@ -0,0 +1,8 @@ +var backend_2metal_2kernels_2steel_2attn_2transforms_8h = +[ + [ "mlx::steel::TransformNone< OutT, InT >", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ], + [ "mlx::steel::TransformAdd< OutT, InT >", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ], + [ "mlx::steel::TransformAxpby< OutT, InT >", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ], + [ "mlx::steel::AccumHelper< T >", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ], + [ "mlx::steel::BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h_source.html b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h_source.html index 38d8120ab..a56a84ca0 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2attn_2transforms_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/transforms.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
transforms.h
@@ -96,14 +110,14 @@ $(function(){ initResizable(false); });
3#pragma once
4
-
6
+
6
8// Transforms and Epilogues
10
11namespace mlx {
-
12namespace steel {
+
12namespace steel {
13
14template <typename OutT, typename InT>
-
15struct TransformNone {
+
15struct TransformNone {
16 static METAL_FUNC OutT apply(InT x) {
17 return static_cast<OutT>(x);
@@ -177,6 +191,7 @@ $(function(){ initResizable(false); });
70} // namespace steel
71} // namespace mlx
+
Definition attn.h:19
Definition allocator.h:7
float accum_type
Definition transforms.h:57
Definition transforms.h:60
@@ -189,13 +204,17 @@ $(function(){ initResizable(false); });
METAL_FUNC OutT apply(InT x, OutT c) const
Definition transforms.h:50
const float alpha
Definition transforms.h:40
TransformAxpby(const float alpha_, const float beta_)
Definition transforms.h:43
+
Definition transforms.h:15
static METAL_FUNC OutT apply(InT x)
Definition transforms.h:16
static METAL_FUNC OutT apply(InT x, OutT)
Definition transforms.h:20
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html index a860bf4ee..62095839e 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/gemm/transforms.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Classes | @@ -119,10 +133,13 @@ Namespaces  
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.js b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.js new file mode 100644 index 000000000..ab629f64e --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h.js @@ -0,0 +1,8 @@ +var backend_2metal_2kernels_2steel_2gemm_2transforms_8h = +[ + [ "mlx::steel::TransformNone< OutT, InT >", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ], + [ "mlx::steel::TransformAdd< OutT, InT >", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ], + [ "mlx::steel::TransformAxpby< OutT, InT >", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ], + [ "mlx::steel::AccumHelper< T >", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ], + [ "mlx::steel::BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h_source.html b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h_source.html index c8295ad7f..9c76ba5b9 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2gemm_2transforms_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/gemm/transforms.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
transforms.h
@@ -96,11 +110,11 @@ $(function(){ initResizable(false); });
3#pragma once
4
-
6
+
6
8// Transforms and Epilogues
10
11namespace mlx {
-
12namespace steel {
+
12namespace steel {
13
14template <typename OutT, typename InT>
@@ -121,7 +135,7 @@ $(function(){ initResizable(false); });
24
25template <typename OutT, typename InT>
- +
27 TransformAdd(const float, const float) {}
28
@@ -140,7 +154,7 @@ $(function(){ initResizable(false); });
37
38template <typename OutT, typename InT>
- +
40 const float alpha;
41 const float beta;
42
@@ -166,7 +180,7 @@ $(function(){ initResizable(false); });
55template <typename T>
-
57 typedef float accum_type;
+
57 typedef float accum_type;
58};
59
@@ -187,16 +201,15 @@ $(function(){ initResizable(false); });
70} // namespace steel
71} // namespace mlx
+
Definition attn.h:19
Definition allocator.h:7
Definition transforms.h:56
float accum_type
Definition transforms.h:57
Definition transforms.h:60
static METAL_FUNC int2 swizzle(uint3 tid, const int swizzle_log)
Definition transforms.h:62
-
Definition transforms.h:26
static METAL_FUNC OutT apply(InT x, OutT c)
Definition transforms.h:33
TransformAdd(const float, const float)
Definition transforms.h:27
static METAL_FUNC OutT apply(InT x)
Definition transforms.h:29
-
Definition transforms.h:39
static METAL_FUNC OutT apply(InT x)
Definition transforms.h:46
const float beta
Definition transforms.h:41
METAL_FUNC OutT apply(InT x, OutT c) const
Definition transforms.h:50
@@ -206,10 +219,13 @@ $(function(){ initResizable(false); });
static METAL_FUNC OutT apply(InT x)
Definition transforms.h:16
static METAL_FUNC OutT apply(InT x, OutT)
Definition transforms.h:20
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.html b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.html index 542013daf..9e3227c78 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/utils.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
@@ -99,14 +113,14 @@ $(function(){ initResizable(false); }); - - - - + + + +

Functions

METAL_FUNC ulong2 elem_to_loc_broadcast (uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, int ndim)
 
METAL_FUNC ulong3 elem_to_loc_broadcast (uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, constant const size_t *c_strides, int ndim)
 
METAL_FUNC ulong2 elem_to_loc_broadcast (uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)
 
METAL_FUNC ulong3 elem_to_loc_broadcast (uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, constant const int64_t *c_strides, int ndim)
 

Function Documentation

- -

◆ elem_to_loc_broadcast() [1/2]

+ +

◆ elem_to_loc_broadcast() [1/2]

@@ -124,17 +138,17 @@ Functions - constant const size_t * a_strides, + constant const int64_t * a_strides, - constant const size_t * b_strides, + constant const int64_t * b_strides, - constant const size_t * c_strides, + constant const int64_t * c_strides, @@ -146,8 +160,8 @@ Functions
- -

◆ elem_to_loc_broadcast() [2/2]

+ +

◆ elem_to_loc_broadcast() [2/2]

@@ -165,12 +179,12 @@ Functions - constant const size_t * a_strides, + constant const int64_t * a_strides, - constant const size_t * b_strides, + constant const int64_t * b_strides, @@ -183,10 +197,13 @@ Functions
- -
+ + diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.js b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.js new file mode 100644 index 000000000..0e8168b55 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h.js @@ -0,0 +1,5 @@ +var backend_2metal_2kernels_2steel_2utils_8h = +[ + [ "elem_to_loc_broadcast", "backend_2metal_2kernels_2steel_2utils_8h.html#a32e15e82a0534d2647b927949860d0fe", null ], + [ "elem_to_loc_broadcast", "backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h_source.html b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h_source.html index 18e04846d..438ab64e7 100644 --- a/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2steel_2utils_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/utils.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
utils.h
@@ -98,11 +112,11 @@ $(function(){ initResizable(false); });
5#include <metal_stdlib>
6
-
7METAL_FUNC ulong2 elem_to_loc_broadcast(
+
7METAL_FUNC ulong2 elem_to_loc_broadcast(
8 uint elem,
9 constant const int* shape,
-
10 constant const size_t* a_strides,
-
11 constant const size_t* b_strides,
+
10 constant const int64_t* a_strides,
+
11 constant const int64_t* b_strides,
12 int ndim) {
13 ulong loc_a{0};
14 ulong loc_b{0};
@@ -117,12 +131,12 @@ $(function(){ initResizable(false); });
23
-
24METAL_FUNC ulong3 elem_to_loc_broadcast(
+
24METAL_FUNC ulong3 elem_to_loc_broadcast(
25 uint elem,
26 constant const int* shape,
-
27 constant const size_t* a_strides,
-
28 constant const size_t* b_strides,
-
29 constant const size_t* c_strides,
+
27 constant const int64_t* a_strides,
+
28 constant const int64_t* b_strides,
+
29 constant const int64_t* c_strides,
30 int ndim) {
31 ulong loc_a{0};
32 ulong loc_b{0};
@@ -137,12 +151,15 @@ $(function(){ initResizable(false); });
41 return ulong3(loc_a, loc_b, loc_c);
42}
-
METAL_FUNC ulong2 elem_to_loc_broadcast(uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, int ndim)
Definition utils.h:7
+
METAL_FUNC ulong2 elem_to_loc_broadcast(uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)
Definition utils.h:7
- - + + diff --git a/docs/build/html/backend_2metal_2kernels_2utils_8h.html b/docs/build/html/backend_2metal_2kernels_2utils_8h.html index 8ea099ba8..5cb4388de 100644 --- a/docs/build/html/backend_2metal_2kernels_2utils_8h.html +++ b/docs/build/html/backend_2metal_2kernels_2utils_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/utils.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+ - + - - + +
+ +
+
+
- - + -
Classes | @@ -108,41 +122,41 @@ $(function(){ initResizable(false); }); Classes struct  Limits< U >   -struct  Limits< uint8_t > +struct  Limits< uint8_t >   -struct  Limits< uint16_t > +struct  Limits< uint16_t >   -struct  Limits< uint32_t > +struct  Limits< uint32_t >   -struct  Limits< uint64_t > +struct  Limits< uint64_t >   -struct  Limits< int8_t > +struct  Limits< int8_t >   -struct  Limits< int16_t > +struct  Limits< int16_t >   -struct  Limits< int32_t > +struct  Limits< int32_t >   -struct  Limits< int64_t > +struct  Limits< int64_t >   -struct  Limits< half > +struct  Limits< half >   -struct  Limits< float > +struct  Limits< float >   -struct  Limits< bfloat16_t > +struct  Limits< bfloat16_t >   -struct  Limits< bool > +struct  Limits< bool >   -struct  Limits< complex64_t > +struct  Limits< complex64_t >   struct  LoopedElemToLoc< DIM, OffsetT, General >   -struct  LoopedElemToLoc< 1, OffsetT, true > +struct  LoopedElemToLoc< 1, OffsetT, true >   -struct  LoopedElemToLoc< 1, OffsetT, false > +struct  LoopedElemToLoc< 1, OffsetT, false >   struct  ConditionalType< condition, T, U >   -struct  ConditionalType< true, T, U > +struct  ConditionalType< true, T, U >  

@@ -161,31 +175,28 @@ Typedefs

- - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -243,18 +254,16 @@ Functions
Value:
template <> \
struct Limits<type> { \
-
static constexpr constant type max = metal::numeric_limits<type>::max(); \
-
static constexpr constant type min = metal::numeric_limits<type>::min(); \
-
static constexpr constant type finite_max = \
+
static constexpr constant type max = metal::numeric_limits<type>::max(); \
+
static constexpr constant type min = metal::numeric_limits<type>::min(); \
+
static constexpr constant type finite_max = \
metal::numeric_limits<type>::max(); \
-
static constexpr constant type finite_min = \
+
static constexpr constant type finite_min = \
metal::numeric_limits<type>::min(); \
};
+
METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
+
METAL_FUNC bfloat16_t max(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
Definition utils.h:23
-
static const constant U max
Definition utils.h:24
-
static const constant U finite_max
Definition utils.h:26
-
static const constant U min
Definition utils.h:25
-
static const constant U finite_min
Definition utils.h:27
@@ -274,13 +283,13 @@ Functions
Value:
template <> \
struct Limits<type> { \
-
static constexpr constant type max = \
+
static constexpr constant type max = \
metal::numeric_limits<type>::infinity(); \
-
static constexpr constant type min = \
+
static constexpr constant type min = \
-metal::numeric_limits<type>::infinity(); \
-
static constexpr constant type finite_max = \
+
static constexpr constant type finite_max = \
metal::numeric_limits<type>::max(); \
-
static constexpr constant type finite_min = \
+
static constexpr constant type finite_min = \
-metal::numeric_limits<type>::max(); \
};
@@ -322,7 +331,7 @@ Functions
-template<typename T , typename U >
+template<typename T, typename U>

Functions

template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc (uint elem, constant const int *shape, constant const StrideT *strides, int ndim)
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc (StrideT elem, constant const int *shape, constant const StrideT *strides, int ndim)
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc (uint3 elem, constant const int *shape, constant const StrideT *strides, int ndim)
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc_1 (uint elem, constant const StrideT &stride)
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc_2 (uint2 elem, constant const StrideT strides[2])
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC IdxT elem_to_loc_3 (uint3 elem, constant const StrideT strides[3])
 
template<typename StrideT , typename IdxT = StrideT>
METAL_FUNC vec< IdxT, 2 > elem_to_loc_2_nd (uint3 elem, constant const int *shape, constant const StrideT *a_strides, constant const StrideT *b_strides, int ndim)
 
template<typename IdxT = size_t>
METAL_FUNC vec< IdxT, 3 > elem_to_loc_3_nd (uint3 elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, constant const size_t *c_strides, int ndim)
 
template<typename T , typename U >
template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc (IdxT elem, constant const int *shape, constant const int64_t *strides, int ndim)
 
template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc (uint3 elem, constant const int *shape, constant const int64_t *strides, int ndim)
 
template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc_1 (uint elem, constant const int64_t &stride)
 
template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc_2 (uint2 elem, constant const int64_t strides[2])
 
template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc_3 (uint3 elem, constant const int64_t strides[3])
 
template<typename IdxT = int64_t>
METAL_FUNC vec< IdxT, 2 > elem_to_loc_2_nd (uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)
 
template<typename IdxT = int64_t>
METAL_FUNC vec< IdxT, 3 > elem_to_loc_3_nd (uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, constant const int64_t *c_strides, int ndim)
 
template<typename T, typename U>
ceildiv (T N, U M)
 Compute ceil((float)N/(float)M)
 
@@ -340,7 +349,7 @@ template<typename T , typename U >
-inline +inline
@@ -349,18 +358,18 @@ template<typename T , typename U >
- -

◆ elem_to_loc() [1/3]

+ +

◆ elem_to_loc() [1/2]

-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
- + @@ -370,7 +379,7 @@ template<typename StrideT , typename IdxT = StrideT> - + @@ -382,46 +391,13 @@ template<typename StrideT , typename IdxT = StrideT> - -

◆ elem_to_loc() [2/3]

+ +

◆ elem_to_loc() [2/2]

-template<typename StrideT , typename IdxT = StrideT>
-
METAL_FUNC IdxT elem_to_loc (StrideT elem, IdxT elem,
constant const StrideT * strides, constant const int64_t * strides,
- - - - - - - - - - - - - - - - - - - - -
METAL_FUNC IdxT elem_to_loc (uint elem,
constant const int * shape,
constant const StrideT * strides,
int ndim )
-
- -
- - -

◆ elem_to_loc() [3/3]

- -
-
-
-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
@@ -436,7 +412,7 @@ template<typename StrideT , typename IdxT = StrideT> - + @@ -448,13 +424,13 @@ template<typename StrideT , typename IdxT = StrideT> - -

◆ elem_to_loc_1()

+ +

◆ elem_to_loc_1()

-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
METAL_FUNC IdxT elem_to_loc
constant const StrideT * strides, constant const int64_t * strides,
@@ -464,20 +440,20 @@ template<typename StrideT , typename IdxT = StrideT> - +
METAL_FUNC IdxT elem_to_loc_1
constant const StrideT & stride )constant const int64_t & stride )
- -

◆ elem_to_loc_2()

+ +

◆ elem_to_loc_2()

-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
@@ -487,20 +463,20 @@ template<typename StrideT , typename IdxT = StrideT> - +
METAL_FUNC IdxT elem_to_loc_2
constant const StrideT strides[2] )constant const int64_t strides[2] )
- -

◆ elem_to_loc_2_nd()

+ +

◆ elem_to_loc_2_nd()

-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
@@ -515,12 +491,12 @@ template<typename StrideT , typename IdxT = StrideT> - + - + @@ -532,13 +508,13 @@ template<typename StrideT , typename IdxT = StrideT> - -

◆ elem_to_loc_3()

+ +

◆ elem_to_loc_3()

-template<typename StrideT , typename IdxT = StrideT>
+template<typename IdxT = int64_t>
METAL_FUNC vec< IdxT, 2 > elem_to_loc_2_nd
constant const StrideT * a_strides, constant const int64_t * a_strides,
constant const StrideT * b_strides, constant const int64_t * b_strides,
@@ -548,20 +524,20 @@ template<typename StrideT , typename IdxT = StrideT> - +
METAL_FUNC IdxT elem_to_loc_3
constant const StrideT strides[3] )constant const int64_t strides[3] )
- -

◆ elem_to_loc_3_nd()

+ +

◆ elem_to_loc_3_nd()

-template<typename IdxT = size_t>
+template<typename IdxT = int64_t>
@@ -576,17 +552,17 @@ template<typename IdxT = size_t> - + - + - + @@ -616,7 +592,7 @@ template<typename IdxT = size_t>
METAL_FUNC vec< IdxT, 3 > elem_to_loc_3_nd
constant const size_t * a_strides, constant const int64_t * a_strides,
constant const size_t * b_strides, constant const int64_t * b_strides,
constant const size_t * c_strides, constant const int64_t * c_strides,
-inline +inline
@@ -641,7 +617,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -670,7 +646,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -699,7 +675,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -728,7 +704,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -757,7 +733,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -791,7 +767,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -825,7 +801,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -859,7 +835,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -893,7 +869,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -922,7 +898,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -951,7 +927,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -980,7 +956,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1009,7 +985,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1038,7 +1014,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1067,7 +1043,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1096,7 +1072,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1125,7 +1101,7 @@ template<typename IdxT = size_t>
-inline +inline
@@ -1133,10 +1109,13 @@ template<typename IdxT = size_t>
- - + + diff --git a/docs/build/html/backend_2metal_2kernels_2utils_8h.js b/docs/build/html/backend_2metal_2kernels_2utils_8h.js new file mode 100644 index 000000000..df2545d99 --- /dev/null +++ b/docs/build/html/backend_2metal_2kernels_2utils_8h.js @@ -0,0 +1,52 @@ +var backend_2metal_2kernels_2utils_8h = +[ + [ "Limits< U >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint8_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint32_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< uint64_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int8_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int32_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< int64_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< half >", "struct_limits.html", "struct_limits" ], + [ "Limits< float >", "struct_limits.html", "struct_limits" ], + [ "Limits< bfloat16_t >", "struct_limits.html", "struct_limits" ], + [ "Limits< bool >", "struct_limits.html", "struct_limits" ], + [ "Limits< complex64_t >", "struct_limits.html", "struct_limits" ], + [ "LoopedElemToLoc< DIM, OffsetT, General >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "LoopedElemToLoc< 1, OffsetT, true >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "LoopedElemToLoc< 1, OffsetT, false >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ], + [ "ConditionalType< condition, T, U >", "struct_conditional_type.html", "struct_conditional_type" ], + [ "ConditionalType< true, T, U >", "struct_conditional_type.html", "struct_conditional_type" ], + [ "instantiate_default_limit", "backend_2metal_2kernels_2utils_8h.html#abedffa358e7ba7782cc78d6772064c7c", null ], + [ "instantiate_float_limit", "backend_2metal_2kernels_2utils_8h.html#a1e520e23f58ca645dea1ac20998d987a", null ], + [ "MLX_MTL_PRAGMA_UNROLL", "backend_2metal_2kernels_2utils_8h.html#a069b682d7d21827461544817d722bfd3", null ], + [ "float16_t", "backend_2metal_2kernels_2utils_8h.html#acb8ddf4a29129846b673c50ba7078773", null ], + [ "ceildiv", "backend_2metal_2kernels_2utils_8h.html#a8e5a4b0fb5d018d7b078d147efe4f1e3", null ], + [ "elem_to_loc", "backend_2metal_2kernels_2utils_8h.html#a497dd9f1a00c8a4303d8782158a0812a", null ], + [ "elem_to_loc", "backend_2metal_2kernels_2utils_8h.html#aa610d2e68eb75d7f2da5db386c1ffc9e", null ], + [ "elem_to_loc_1", "backend_2metal_2kernels_2utils_8h.html#a6787efcdf7a898d5bafb48f2a2f1e555", null ], + [ "elem_to_loc_2", "backend_2metal_2kernels_2utils_8h.html#aac0e227f82198021246aa91d8c427b3e", null ], + [ "elem_to_loc_2_nd", "backend_2metal_2kernels_2utils_8h.html#a97ea664406a270b34ff5a23815716730", null ], + [ "elem_to_loc_3", "backend_2metal_2kernels_2utils_8h.html#ac8f4258ba306870b0280079f1c5eb23e", null ], + [ "elem_to_loc_3_nd", "backend_2metal_2kernels_2utils_8h.html#a62b078234dfd1d101ce635430b050916", null ], + [ "log1p", "backend_2metal_2kernels_2utils_8h.html#a3501b665c8837eabf9789ea27a7d6946", null ], + [ "log1p", "backend_2metal_2kernels_2utils_8h.html#a27c03f2f90ab56db2e4d59559a3d2e9a", null ], + [ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#ab4cbcdb054f9165130da91a3334da0cf", null ], + [ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#ab8175b66bcc080fb89f738143568c30b", null ], + [ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#a3bdbdfeb7a1dde40cd3ce1df8d9213b5", null ], + [ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#a71986ecdd7d18f975dd22c3df7421ce2", null ], + [ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#ad55bd473647f2c6c68e65e5312c132d1", null ], + [ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a94e02a6ae8c39cbf4cb23aa44df9dbd5", null ], + [ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a7bb56415c5412a6a26f70a990915f064", null ], + [ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a5862d5ea154c9b76cf56a630cf6385b4", null ], + [ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#a48ae83a8caf5c74810df60b6c6cdb062", null ], + [ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#ad9a671a5f9aaa729ae7a77026f16bcb0", null ], + [ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#a0c1e4d782fcc56e1ab5565cef12430dd", null ], + [ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#aba6279624b1d30c525efee856a222b5c", null ], + [ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#ae0f5c42020275a588234e69f1eb7a485", null ], + [ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a92b455bac6a23af51c35ea83de2383eb", null ], + [ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a617f3857caf33c569afa6148135f8b7a", null ], + [ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a39e436e0a942912266aae7e0bd82d7c0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2kernels_2utils_8h_source.html b/docs/build/html/backend_2metal_2kernels_2utils_8h_source.html index f5050fc46..466f232a5 100644 --- a/docs/build/html/backend_2metal_2kernels_2utils_8h_source.html +++ b/docs/build/html/backend_2metal_2kernels_2utils_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/utils.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+ - + - - + +
+ +
+
+
- - + -
utils.h
@@ -107,7 +121,7 @@ $(function(){ initResizable(false); });
15
16typedef half float16_t;
-
17
+
17
19// Type limits utils
21
22template <typename U>
@@ -133,14 +147,14 @@ $(function(){ initResizable(false); });
39 };
40
- - - - - - - - + + + + + + + +
49
50#define instantiate_float_limit(type) \
@@ -157,42 +171,42 @@ $(function(){ initResizable(false); });
61 };
62
- - - + + +
66
67template <>
-
68struct Limits<bool> {
-
69 static constexpr constant bool max = true;
-
70 static constexpr constant bool min = false;
+
68struct Limits<bool> {
+
69 static constexpr constant bool max = true;
+
70 static constexpr constant bool min = false;
71};
72
73template <>
- -
75 static constexpr constant complex64_t max = complex64_t(
+ +
75 static constexpr constant complex64_t max = complex64_t(
76 metal::numeric_limits<float>::infinity(),
77 metal::numeric_limits<float>::infinity());
-
78 static constexpr constant complex64_t min = complex64_t(
+
78 static constexpr constant complex64_t min = complex64_t(
79 -metal::numeric_limits<float>::infinity(),
80 -metal::numeric_limits<float>::infinity());
81};
-
82
+
82
84// Indexing utils
86
87#define MLX_MTL_PRAGMA_UNROLL _Pragma("clang loop unroll(full)")
-
88
+
88
90// Single Array with generic dims
91
-
92template <typename StrideT, typename IdxT = StrideT>
+
92template <typename IdxT = int64_t>
-
93METAL_FUNC IdxT elem_to_loc(
-
94 uint elem,
+
93METAL_FUNC IdxT elem_to_loc(
+
94 IdxT elem,
95 constant const int* shape,
-
96 constant const StrideT* strides,
+
96 constant const int64_t* strides,
97 int ndim) {
98 IdxT loc = 0;
99 for (int i = ndim - 1; i >= 0 && elem > 0; --i) {
@@ -203,419 +217,405 @@ $(function(){ initResizable(false); });
104}
105
-
106template <typename StrideT, typename IdxT = StrideT>
-
-
107METAL_FUNC IdxT elem_to_loc(
-
108 StrideT elem,
-
109 constant const int* shape,
-
110 constant const StrideT* strides,
-
111 int ndim) {
-
112 IdxT loc = 0;
-
113 for (int i = ndim - 1; i >= 0 && elem > 0; --i) {
-
114 loc += (elem % shape[i]) * IdxT(strides[i]);
-
115 elem /= shape[i];
-
116 }
-
117 return loc;
-
118}
+
106// Non templated version to handle arbitrary dims
+
107template <typename IdxT = int64_t>
+
+
108METAL_FUNC IdxT elem_to_loc(
+
109 uint3 elem,
+
110 constant const int* shape,
+
111 constant const int64_t* strides,
+
112 int ndim) {
+
113 IdxT loc =
+
114 elem.x * IdxT(strides[ndim - 1]) + elem.y * IdxT(strides[ndim - 2]);
+
115 for (int d = ndim - 3; d >= 0; --d) {
+
116 loc += (elem.z % shape[d]) * IdxT(strides[d]);
+
117 elem.z /= shape[d];
+
118 }
+
119 return loc;
+
120}
-
119
-
120// Non templated version to handle arbitrary dims
-
121template <typename StrideT, typename IdxT = StrideT>
-
-
122METAL_FUNC IdxT elem_to_loc(
-
123 uint3 elem,
-
124 constant const int* shape,
-
125 constant const StrideT* strides,
-
126 int ndim) {
-
127 IdxT loc =
-
128 elem.x * IdxT(strides[ndim - 1]) + elem.y * IdxT(strides[ndim - 2]);
-
129 for (int d = ndim - 3; d >= 0; --d) {
-
130 loc += (elem.z % shape[d]) * IdxT(strides[d]);
-
131 elem.z /= shape[d];
-
132 }
-
133 return loc;
-
134}
+
121
+
123// Single Array with fixed N dims
+
124
+
125template <typename IdxT = int64_t>
+
+
126METAL_FUNC IdxT elem_to_loc_1(uint elem, constant const int64_t& stride) {
+
127 return elem * IdxT(stride);
+
128}
-
135
-
137// Single Array with fixed N dims
-
138
-
139template <typename StrideT, typename IdxT = StrideT>
-
-
140METAL_FUNC IdxT elem_to_loc_1(uint elem, constant const StrideT& stride) {
-
141 return elem * IdxT(stride);
-
142}
+
129
+
130template <typename IdxT = int64_t>
+
+
131METAL_FUNC IdxT elem_to_loc_2(uint2 elem, constant const int64_t strides[2]) {
+
132 return elem.x * IdxT(strides[1]) + elem.y * IdxT(strides[0]);
+
133}
+
134
+
135template <typename IdxT = int64_t>
+
+
136METAL_FUNC IdxT elem_to_loc_3(uint3 elem, constant const int64_t strides[3]) {
+
137 return elem.x * IdxT(strides[2]) + elem.y * IdxT(strides[1]) +
+
138 elem.z * IdxT(strides[0]);
+
139}
+
+
140
+
142// Multiple Arrays with generic dims
143
-
144template <typename StrideT, typename IdxT = StrideT>
+
144template <typename IdxT = int64_t>
-
145METAL_FUNC IdxT elem_to_loc_2(uint2 elem, constant const StrideT strides[2]) {
-
146 return elem.x * IdxT(strides[1]) + elem.y * IdxT(strides[0]);
-
147}
+
145METAL_FUNC vec<IdxT, 2> elem_to_loc_2_nd(
+
146 uint3 elem,
+
147 constant const int* shape,
+
148 constant const int64_t* a_strides,
+
149 constant const int64_t* b_strides,
+
150 int ndim) {
+
151 vec<IdxT, 2> loc = {
+
152 IdxT(
+
153 elem.x * IdxT(a_strides[ndim - 1]) +
+
154 IdxT(elem.y) * IdxT(a_strides[ndim - 2])),
+
155 IdxT(
+
156 elem.x * IdxT(b_strides[ndim - 1]) +
+
157 elem.y * IdxT(b_strides[ndim - 2]))};
+
158 for (int d = ndim - 3; d >= 0; --d) {
+
159 uint l = elem.z % shape[d];
+
160 loc.x += l * IdxT(a_strides[d]);
+
161 loc.y += l * IdxT(b_strides[d]);
+
162 elem.z /= shape[d];
+
163 }
+
164 return loc;
+
165}
-
148
-
149template <typename StrideT, typename IdxT = StrideT>
-
-
150METAL_FUNC IdxT elem_to_loc_3(uint3 elem, constant const StrideT strides[3]) {
-
151 return elem.x * IdxT(strides[2]) + elem.y * IdxT(strides[1]) +
-
152 elem.z * IdxT(strides[0]);
-
153}
-
-
154
-
156// Multiple Arrays with generic dims
-
157
-
158template <typename StrideT, typename IdxT = StrideT>
-
-
159METAL_FUNC vec<IdxT, 2> elem_to_loc_2_nd(
-
160 uint3 elem,
-
161 constant const int* shape,
-
162 constant const StrideT* a_strides,
-
163 constant const StrideT* b_strides,
-
164 int ndim) {
-
165 vec<IdxT, 2> loc = {
-
166 IdxT(
-
167 elem.x * IdxT(a_strides[ndim - 1]) +
-
168 IdxT(elem.y) * IdxT(a_strides[ndim - 2])),
-
169 IdxT(
-
170 elem.x * IdxT(b_strides[ndim - 1]) +
-
171 elem.y * IdxT(b_strides[ndim - 2]))};
-
172 for (int d = ndim - 3; d >= 0; --d) {
-
173 uint l = elem.z % shape[d];
-
174 loc.x += l * IdxT(a_strides[d]);
-
175 loc.y += l * IdxT(b_strides[d]);
-
176 elem.z /= shape[d];
-
177 }
-
178 return loc;
-
179}
-
-
180
-
181template <typename IdxT = size_t>
-
-
182METAL_FUNC vec<IdxT, 3> elem_to_loc_3_nd(
-
183 uint3 elem,
-
184 constant const int* shape,
-
185 constant const size_t* a_strides,
-
186 constant const size_t* b_strides,
-
187 constant const size_t* c_strides,
-
188 int ndim) {
-
189 vec<IdxT, 3> loc = {
-
190 elem.x * IdxT(a_strides[ndim - 1]) + elem.y * IdxT(a_strides[ndim - 2]),
-
191 elem.x * IdxT(b_strides[ndim - 1]) + elem.y * IdxT(b_strides[ndim - 2]),
-
192 elem.x * IdxT(c_strides[ndim - 1]) + elem.y * IdxT(c_strides[ndim - 2])};
-
193 for (int d = ndim - 3; d >= 0; --d) {
-
194 uint l = elem.z % shape[d];
-
195 loc.x += l * IdxT(a_strides[d]);
-
196 loc.y += l * IdxT(b_strides[d]);
-
197 loc.z += l * IdxT(c_strides[d]);
-
198 elem.z /= shape[d];
-
199 }
-
200 return loc;
-
201}
+
166
+
167template <typename IdxT = int64_t>
+
+
168METAL_FUNC vec<IdxT, 3> elem_to_loc_3_nd(
+
169 uint3 elem,
+
170 constant const int* shape,
+
171 constant const int64_t* a_strides,
+
172 constant const int64_t* b_strides,
+
173 constant const int64_t* c_strides,
+
174 int ndim) {
+
175 vec<IdxT, 3> loc = {
+
176 IdxT(elem.x * IdxT(a_strides[ndim - 1])) +
+
177 IdxT(elem.y * IdxT(a_strides[ndim - 2])),
+
178 IdxT(elem.x * IdxT(b_strides[ndim - 1])) +
+
179 IdxT(elem.y * IdxT(b_strides[ndim - 2])),
+
180 IdxT(elem.x * IdxT(c_strides[ndim - 1])) +
+
181 IdxT(elem.y * IdxT(c_strides[ndim - 2]))};
+
182 for (int d = ndim - 3; d >= 0; --d) {
+
183 uint l = elem.z % shape[d];
+
184 loc.x += l * IdxT(a_strides[d]);
+
185 loc.y += l * IdxT(b_strides[d]);
+
186 loc.z += l * IdxT(c_strides[d]);
+
187 elem.z /= shape[d];
+
188 }
+
189 return loc;
+
190}
+
191
+
193// Elem to loc in a loop utils
+
195
+
196template <int DIM, typename OffsetT = size_t, bool General = true>
+
+ +
198 int dim;
+
199 LoopedElemToLoc<DIM - 1, OffsetT, General> inner_looper;
+
200 OffsetT offset{0};
+
201 int index{0};
202
-
204// Elem to loc in a loop utils
-
206
-
207template <int DIM, typename OffsetT = size_t, bool General = true>
-
- -
209 int dim;
-
210 LoopedElemToLoc<DIM - 1, OffsetT, General> inner_looper;
-
211 OffsetT offset{0};
-
212 int index{0};
-
213
- -
215
-
-
216 void next(const constant int* shape, const constant size_t* strides) {
-
217 if (dim == 0) {
-
218 return;
-
219 }
-
220 index++;
-
221 offset += OffsetT(strides[dim - 1]);
-
222 if (index >= shape[dim - 1]) {
-
223 index = 0;
-
224 inner_looper.next(shape, strides);
-
225 offset = inner_looper.offset;
-
226 }
-
227 }
+ +
204
+
+
205 void next(const constant int* shape, const constant int64_t* strides) {
+
206 if (dim == 0) {
+
207 return;
+
208 }
+
209 index++;
+
210 offset += OffsetT(strides[dim - 1]);
+
211 if (index >= shape[dim - 1]) {
+
212 index = 0;
+
213 inner_looper.next(shape, strides);
+
214 offset = inner_looper.offset;
+
215 }
+
216 }
-
228
-
-
229 void next(int n, const constant int* shape, const constant size_t* strides) {
-
230 if (dim == 0) {
-
231 return;
-
232 }
-
233 index += n;
-
234 offset += n * OffsetT(strides[dim - 1]);
-
235
-
236 if (index >= shape[dim - 1]) {
-
237 int extra = index - shape[dim - 1];
-
238 if (extra >= shape[dim - 1]) {
-
239 inner_looper.next(1 + extra / shape[dim - 1], shape, strides);
-
240 extra = extra % shape[dim - 1];
-
241 } else {
-
242 inner_looper.next(shape, strides);
-
243 }
-
244 index = 0;
-
245 offset = inner_looper.offset;
-
246 if (extra > 0) {
-
247 next(extra, shape, strides);
-
248 }
-
249 }
-
250 }
+
217
+
+
218 void next(int n, const constant int* shape, const constant int64_t* strides) {
+
219 if (dim == 0) {
+
220 return;
+
221 }
+
222 index += n;
+
223 offset += n * OffsetT(strides[dim - 1]);
+
224
+
225 if (index >= shape[dim - 1]) {
+
226 int extra = index - shape[dim - 1];
+
227 if (extra >= shape[dim - 1]) {
+
228 inner_looper.next(1 + extra / shape[dim - 1], shape, strides);
+
229 extra = extra % shape[dim - 1];
+
230 } else {
+
231 inner_looper.next(shape, strides);
+
232 }
+
233 index = 0;
+
234 offset = inner_looper.offset;
+
235 if (extra > 0) {
+
236 next(extra, shape, strides);
+
237 }
+
238 }
+
239 }
+
240
+
+
241 OffsetT location() {
+
242 return offset;
+
243 }
+
+
244};
+
+
245
+
246template <typename OffsetT>
+
+
247struct LoopedElemToLoc<1, OffsetT, true> {
+
248 int dim;
+
249 OffsetT offset{0};
+
250 uint index{0};
251
-
-
252 OffsetT location() {
-
253 return offset;
-
254 }
+ +
253
+
+
254 void next(const constant int* shape, const constant int64_t* strides) {
+
255 index++;
+
256 if (dim > 1) {
+
257 offset = elem_to_loc<OffsetT>(index, shape, strides, dim);
+
258 } else {
+
259 offset += OffsetT(strides[0]);
+
260 }
+
261 }
-
255};
-
-
256
-
257template <typename OffsetT>
-
-
258struct LoopedElemToLoc<1, OffsetT, true> {
-
259 int dim;
-
260 OffsetT offset{0};
-
261 uint index{0};
262
- -
264
-
-
265 void next(const constant int* shape, const constant size_t* strides) {
-
266 index++;
-
267 if (dim > 1) {
-
268 offset = elem_to_loc<size_t, OffsetT>(index, shape, strides, dim);
-
269 } else {
-
270 offset += OffsetT(strides[0]);
-
271 }
-
272 }
+
+
263 void next(int n, const constant int* shape, const constant int64_t* strides) {
+
264 index += n;
+
265 if (dim > 1) {
+
266 offset = elem_to_loc<OffsetT>(index, shape, strides, dim);
+
267 } else {
+
268 offset = index * OffsetT(strides[0]);
+
269 }
+
270 }
-
273
-
-
274 void next(int n, const constant int* shape, const constant size_t* strides) {
-
275 index += n;
-
276 if (dim > 1) {
-
277 offset = elem_to_loc<size_t, OffsetT>(index, shape, strides, dim);
-
278 } else {
-
279 offset = index * OffsetT(strides[0]);
-
280 }
-
281 }
+
271
+
+
272 OffsetT location() {
+
273 return offset;
+
274 }
+
275};
+
+
276
+
277template <typename OffsetT>
+
+
278struct LoopedElemToLoc<1, OffsetT, false> {
+
279 OffsetT offset{0};
+
280
+
282
-
283 OffsetT location() {
-
284 return offset;
+
283 void next(const constant int*, const constant int64_t* strides) {
+
284 offset += OffsetT(strides[0]);
285 }
-
286};
+
286
+
+
287 void next(int n, const constant int*, const constant int64_t* strides) {
+
288 offset += n * OffsetT(strides[0]);
+
289 }
-
287
-
288template <typename OffsetT>
-
-
289struct LoopedElemToLoc<1, OffsetT, false> {
-
290 OffsetT offset{0};
-
291
- -
293
-
-
294 void next(const constant int*, const constant size_t* strides) {
-
295 offset += OffsetT(strides[0]);
-
296 }
+
290
+
+
291 OffsetT location() {
+
292 return offset;
+
293 }
-
297
-
-
298 void next(int n, const constant int*, const constant size_t* strides) {
-
299 offset += n * OffsetT(strides[0]);
-
300 }
+
294};
-
301
+
295
+
297// Calculation utils
+
299
+
301template <typename T, typename U>
-
302 OffsetT location() {
-
303 return offset;
-
304 }
+
302inline T ceildiv(T N, U M) {
+
303 return (N + M - 1) / M;
+
304}
-
305};
+
305
+
306// https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#1202
+
+
307inline float log1p(float x) {
+
308 float xp1 = 1.0f + x;
+
309 if (xp1 == Limits<float>::max) {
+
310 return Limits<float>::max;
+
311 }
+
312 if (xp1 == 1.0f) {
+
313 return x;
+
314 }
+
315
+
316 return x * (metal::log(xp1) / (xp1 - 1.0f));
+
317}
-
306
-
308// Calculation utils
-
310
-
312template <typename T, typename U>
-
-
313inline T ceildiv(T N, U M) {
-
314 return (N + M - 1) / M;
-
315}
+
318
+
+ +
320 float xp1 = 1.0f + static_cast<float>(x);
+
321 if (xp1 == Limits<float>::max) {
+ +
323 }
+
324 if (xp1 == 1.0f) {
+
325 return x;
+
326 }
+
327
+
328 return bfloat16_t(x * (metal::log(xp1) / (xp1 - 1.0f)));
+
329}
-
316
-
317// https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#1202
-
-
318inline float log1p(float x) {
-
319 float xp1 = 1.0f + x;
-
320 if (xp1 == Limits<float>::max) {
-
321 return Limits<float>::max;
-
322 }
-
323 if (xp1 == 1.0f) {
-
324 return x;
-
325 }
-
326
-
327 return x * (metal::log(xp1) / (xp1 - 1.0f));
-
328}
+
330
+
332// SIMD shuffle ops
+
334
+
+
335inline uint64_t simd_shuffle_down(uint64_t data, uint16_t delta) {
+
336 return as_type<uint64_t>(
+
337 metal::simd_shuffle_down(as_type<uint2>(data), delta));
+
338}
-
329
-
- -
331 float xp1 = 1.0f + static_cast<float>(x);
-
332 if (xp1 == Limits<float>::max) {
- -
334 }
-
335 if (xp1 == 1.0f) {
-
336 return x;
-
337 }
-
338
-
339 return bfloat16_t(x * (metal::log(xp1) / (xp1 - 1.0f)));
-
340}
+
339
+
+
340inline int64_t simd_shuffle_down(int64_t data, uint16_t delta) {
+
341 return as_type<int64_t>(
+
342 metal::simd_shuffle_down(as_type<uint2>(data), delta));
+
343}
-
341
-
343// SIMD shuffle ops
-
345
-
-
346inline uint64_t simd_shuffle_down(uint64_t data, uint16_t delta) {
-
347 return as_type<uint64_t>(
-
348 metal::simd_shuffle_down(as_type<uint2>(data), delta));
-
349}
+
344
+
+
345inline bool simd_shuffle_down(bool data, uint16_t delta) {
+
346 return simd_shuffle_down(static_cast<uint32_t>(data), delta);
+
347}
-
350
-
-
351inline int64_t simd_shuffle_down(int64_t data, uint16_t delta) {
-
352 return as_type<int64_t>(
-
353 metal::simd_shuffle_down(as_type<uint2>(data), delta));
-
354}
+
348
+
+
349inline complex64_t simd_shuffle_down(complex64_t data, uint16_t delta) {
+
350 return complex64_t(
+
351 simd_shuffle_down(data.real, delta), simd_shuffle_down(data.imag, delta));
+
352}
-
355
-
-
356inline bool simd_shuffle_down(bool data, uint16_t delta) {
-
357 return simd_shuffle_down(static_cast<uint32_t>(data), delta);
-
358}
+
353
+
+
354inline uint64_t simd_shuffle_up(uint64_t data, uint16_t delta) {
+
355 return as_type<uint64_t>(metal::simd_shuffle_up(as_type<uint2>(data), delta));
+
356}
-
359
-
-
360inline complex64_t simd_shuffle_down(complex64_t data, uint16_t delta) {
-
361 return complex64_t(
-
362 simd_shuffle_down(data.real, delta), simd_shuffle_down(data.imag, delta));
-
363}
+
357
+
+
358inline int64_t simd_shuffle_up(int64_t data, uint16_t delta) {
+
359 return as_type<int64_t>(metal::simd_shuffle_up(as_type<uint2>(data), delta));
+
360}
-
364
-
-
365inline uint64_t simd_shuffle_up(uint64_t data, uint16_t delta) {
-
366 return as_type<uint64_t>(metal::simd_shuffle_up(as_type<uint2>(data), delta));
-
367}
+
361
+
+
362inline bool simd_shuffle_up(bool data, uint16_t delta) {
+
363 return simd_shuffle_up(static_cast<uint32_t>(data), delta);
+
364}
-
368
-
-
369inline int64_t simd_shuffle_up(int64_t data, uint16_t delta) {
-
370 return as_type<int64_t>(metal::simd_shuffle_up(as_type<uint2>(data), delta));
-
371}
+
365
+
+
366inline complex64_t simd_shuffle_up(complex64_t data, uint16_t delta) {
+
367 return complex64_t(
+
368 simd_shuffle_up(data.real, delta), simd_shuffle_up(data.imag, delta));
+
369}
-
372
-
-
373inline bool simd_shuffle_up(bool data, uint16_t delta) {
-
374 return simd_shuffle_up(static_cast<uint32_t>(data), delta);
+
370
+
371inline uint64_t
+
+
372simd_shuffle_and_fill_up(uint64_t data, uint64_t filling, uint16_t delta) {
+
373 return as_type<uint64_t>(metal::simd_shuffle_and_fill_up(
+
374 as_type<uint2>(data), as_type<uint2>(filling), delta));
375}
376
-
-
377inline complex64_t simd_shuffle_up(complex64_t data, uint16_t delta) {
-
378 return complex64_t(
-
379 simd_shuffle_up(data.real, delta), simd_shuffle_up(data.imag, delta));
-
380}
+
377inline int64_t
+
+
378simd_shuffle_and_fill_up(int64_t data, int64_t filling, uint16_t delta) {
+
379 return as_type<int64_t>(metal::simd_shuffle_and_fill_up(
+
380 as_type<uint2>(data), as_type<uint2>(filling), delta));
+
381}
-
381
-
382inline uint64_t
+
382
-
383simd_shuffle_and_fill_up(uint64_t data, uint64_t filling, uint16_t delta) {
-
384 return as_type<uint64_t>(metal::simd_shuffle_and_fill_up(
-
385 as_type<uint2>(data), as_type<uint2>(filling), delta));
+
383inline bool simd_shuffle_and_fill_up(bool data, bool filling, uint16_t delta) {
+ +
385 static_cast<uint32_t>(data), static_cast<uint32_t>(filling), delta);
386}
387
-
388inline int64_t
-
-
389simd_shuffle_and_fill_up(int64_t data, int64_t filling, uint16_t delta) {
-
390 return as_type<int64_t>(metal::simd_shuffle_and_fill_up(
-
391 as_type<uint2>(data), as_type<uint2>(filling), delta));
-
392}
+
+ +
389 complex64_t data,
+
390 complex64_t filling,
+
391 uint16_t delta) {
+
392 return complex64_t(
+
393 simd_shuffle_and_fill_up(data.real, filling.real, delta),
+
394 simd_shuffle_and_fill_up(data.imag, filling.imag, delta));
+
395}
-
393
-
-
394inline bool simd_shuffle_and_fill_up(bool data, bool filling, uint16_t delta) {
- -
396 static_cast<uint32_t>(data), static_cast<uint32_t>(filling), delta);
-
397}
+
396
+
+
397inline uint64_t simd_shuffle(uint64_t data, uint16_t lane) {
+
398 return as_type<uint64_t>(metal::simd_shuffle(as_type<uint2>(data), lane));
+
399}
-
398
-
- -
400 complex64_t data,
-
401 complex64_t filling,
-
402 uint16_t delta) {
-
403 return complex64_t(
-
404 simd_shuffle_and_fill_up(data.real, filling.real, delta),
-
405 simd_shuffle_and_fill_up(data.imag, filling.imag, delta));
-
406}
+
400
+
+
401inline int64_t simd_shuffle(int64_t data, uint16_t lane) {
+
402 return as_type<int64_t>(metal::simd_shuffle(as_type<uint2>(data), lane));
+
403}
-
407
-
-
408inline uint64_t simd_shuffle(uint64_t data, uint16_t lane) {
-
409 return as_type<uint64_t>(metal::simd_shuffle(as_type<uint2>(data), lane));
-
410}
+
404
+
+
405inline bool simd_shuffle(bool data, uint16_t lane) {
+
406 return simd_shuffle(static_cast<uint32_t>(data), lane);
+
407}
-
411
-
-
412inline int64_t simd_shuffle(int64_t data, uint16_t lane) {
-
413 return as_type<int64_t>(metal::simd_shuffle(as_type<uint2>(data), lane));
-
414}
+
408
+
+
409inline complex64_t simd_shuffle(complex64_t data, uint16_t lane) {
+
410 return complex64_t(
+
411 simd_shuffle(data.real, lane), simd_shuffle(data.imag, lane));
+
412}
-
415
-
-
416inline bool simd_shuffle(bool data, uint16_t lane) {
-
417 return simd_shuffle(static_cast<uint32_t>(data), lane);
-
418}
+
413
+
414// std::conditional is not included with Metal
+
415template <bool condition, typename T, typename U>
+
+ +
417 using type = U;
+
418};
419
-
-
420inline complex64_t simd_shuffle(complex64_t data, uint16_t lane) {
-
421 return complex64_t(
-
422 simd_shuffle(data.real, lane), simd_shuffle(data.imag, lane));
-
423}
+
420template <typename T, typename U>
+
+
421struct ConditionalType<true, T, U> {
+
422 using type = T;
+
423};
-
424
-
425// std::conditional is not included with Metal
-
426template <bool condition, typename T, typename U>
-
- -
428 using type = U;
-
429};
-
-
430
-
431template <typename T, typename U>
-
-
432struct ConditionalType<true, T, U> {
-
433 using type = T;
-
434};
-
-
BufferHolder * next
Definition allocator.h:38
struct _MLX_BFloat16 bfloat16_t
Definition bf16.h:251
#define instantiate_float_limit(type)
Definition utils.h:50
-
METAL_FUNC IdxT elem_to_loc(uint elem, constant const int *shape, constant const StrideT *strides, int ndim)
Definition utils.h:93
-
float log1p(float x)
Definition utils.h:318
-
METAL_FUNC IdxT elem_to_loc_2(uint2 elem, constant const StrideT strides[2])
Definition utils.h:145
-
METAL_FUNC IdxT elem_to_loc_3(uint3 elem, constant const StrideT strides[3])
Definition utils.h:150
-
METAL_FUNC vec< IdxT, 3 > elem_to_loc_3_nd(uint3 elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, constant const size_t *c_strides, int ndim)
Definition utils.h:182
-
METAL_FUNC vec< IdxT, 2 > elem_to_loc_2_nd(uint3 elem, constant const int *shape, constant const StrideT *a_strides, constant const StrideT *b_strides, int ndim)
Definition utils.h:159
-
T ceildiv(T N, U M)
Compute ceil((float)N/(float)M)
Definition utils.h:313
+
float log1p(float x)
Definition utils.h:307
+
METAL_FUNC IdxT elem_to_loc(IdxT elem, constant const int *shape, constant const int64_t *strides, int ndim)
Definition utils.h:93
+
METAL_FUNC vec< IdxT, 3 > elem_to_loc_3_nd(uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, constant const int64_t *c_strides, int ndim)
Definition utils.h:168
+
METAL_FUNC IdxT elem_to_loc_1(uint elem, constant const int64_t &stride)
Definition utils.h:126
+
T ceildiv(T N, U M)
Compute ceil((float)N/(float)M)
Definition utils.h:302
+
METAL_FUNC vec< IdxT, 2 > elem_to_loc_2_nd(uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)
Definition utils.h:145
+
METAL_FUNC IdxT elem_to_loc_2(uint2 elem, constant const int64_t strides[2])
Definition utils.h:131
#define instantiate_default_limit(type)
Definition utils.h:30
-
METAL_FUNC IdxT elem_to_loc_1(uint elem, constant const StrideT &stride)
Definition utils.h:140
+
METAL_FUNC IdxT elem_to_loc_3(uint3 elem, constant const int64_t strides[3])
Definition utils.h:136
half float16_t
Definition utils.h:16
@@ -624,41 +624,49 @@ $(function(){ initResizable(false); });
METAL_FUNC bfloat16_t log(bfloat16_t x)
Definition bf16_math.h:232
METAL_FUNC bfloat16_t simd_shuffle_down(bfloat16_t data, ushort delta)
Definition bf16_math.h:377
METAL_FUNC bfloat16_t simd_shuffle_up(bfloat16_t data, ushort delta)
Definition bf16_math.h:377
-
Definition bf16.h:48
-
T type
Definition utils.h:433
-
Definition utils.h:427
-
U type
Definition utils.h:428
+
Definition utils.h:416
+
U type
Definition utils.h:417
+
T type
Definition utils.h:422
Definition utils.h:23
+
static constexpr constant bool min
Definition utils.h:70
static const constant U max
Definition utils.h:24
static const constant U finite_max
Definition utils.h:26
static const constant U min
Definition utils.h:25
+
static constexpr constant complex64_t min
Definition utils.h:78
+
static constexpr constant complex64_t max
Definition utils.h:75
+
static constexpr constant bool max
Definition utils.h:69
static const constant U finite_min
Definition utils.h:27
-
void next(const constant int *, const constant size_t *strides)
Definition utils.h:294
-
LoopedElemToLoc(int)
Definition utils.h:292
-
OffsetT location()
Definition utils.h:302
-
void next(int n, const constant int *, const constant size_t *strides)
Definition utils.h:298
-
OffsetT location()
Definition utils.h:283
-
int dim
Definition utils.h:259
-
void next(int n, const constant int *shape, const constant size_t *strides)
Definition utils.h:274
-
LoopedElemToLoc(int dim)
Definition utils.h:263
-
void next(const constant int *shape, const constant size_t *strides)
Definition utils.h:265
-
Definition utils.h:208
-
void next(const constant int *shape, const constant size_t *strides)
Definition utils.h:216
-
LoopedElemToLoc(int dim)
Definition utils.h:214
-
void next(int n, const constant int *shape, const constant size_t *strides)
Definition utils.h:229
-
LoopedElemToLoc< DIM - 1, OffsetT, General > inner_looper
Definition utils.h:210
-
OffsetT location()
Definition utils.h:252
-
int index
Definition utils.h:212
-
OffsetT offset
Definition utils.h:211
-
int dim
Definition utils.h:209
+
LoopedElemToLoc(int)
Definition utils.h:281
+
uint index
Definition utils.h:250
+
OffsetT offset
Definition utils.h:249
+
LoopedElemToLoc(int dim)
Definition utils.h:203
+
void next(int n, const constant int *, const constant int64_t *strides)
Definition utils.h:287
+
OffsetT location()
Definition utils.h:272
+
void next(int n, const constant int *shape, const constant int64_t *strides)
Definition utils.h:263
+
int dim
Definition utils.h:248
+
OffsetT location()
Definition utils.h:291
+
LoopedElemToLoc< DIM - 1, OffsetT, General > inner_looper
Definition utils.h:199
+
void next(const constant int *shape, const constant int64_t *strides)
Definition utils.h:205
+
void next(const constant int *, const constant int64_t *strides)
Definition utils.h:283
+
OffsetT location()
Definition utils.h:241
+
LoopedElemToLoc(int dim)
Definition utils.h:252
+
int index
Definition utils.h:201
+
OffsetT offset
Definition utils.h:200
+
void next(const constant int *shape, const constant int64_t *strides)
Definition utils.h:254
+
void next(int n, const constant int *shape, const constant int64_t *strides)
Definition utils.h:218
+
OffsetT offset
Definition utils.h:279
+
int dim
Definition utils.h:198
Definition complex.h:20
float imag
Definition complex.h:22
float real
Definition complex.h:21
- -
+ + diff --git a/docs/build/html/backend_2metal_2utils_8h.html b/docs/build/html/backend_2metal_2utils_8h.html index 93f04c832..896f150bb 100644 --- a/docs/build/html/backend_2metal_2utils_8h.html +++ b/docs/build/html/backend_2metal_2utils_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/utils.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
Namespaces | @@ -115,10 +129,10 @@ Functions   MTL::Size mlx::core::get_block_dims (int dim0, int dim1, int dim2, int pow2=10)   -MTL::Size mlx::core::get_2d_grid_dims (const std::vector< int > &shape, const std::vector< size_t > &strides) -  -MTL::Size mlx::core::get_2d_grid_dims (const std::vector< int > &shape, const std::vector< size_t > &strides, size_t divisor) -  +MTL::Size mlx::core::get_2d_grid_dims (const Shape &shape, const Strides &strides) +  +MTL::Size mlx::core::get_2d_grid_dims (const Shape &shape, const Strides &strides, size_t divisor) +  NS::String * mlx::core::make_string (std::ostringstream &os)   void mlx::core::debug_set_stream_queue_label (MTL::CommandQueue *queue, int index) @@ -127,18 +141,21 @@ Functions   std::string mlx::core::get_primitive_string (Primitive *primitive)   -template<typename T > +template<typename T> void mlx::core::concatenate (std::string &acc, T first)   -template<typename T , typename... Args> +template<typename T, typename... Args> void mlx::core::concatenate (std::string &acc, T first, Args... args)  
- -
+ + diff --git a/docs/build/html/backend_2metal_2utils_8h.js b/docs/build/html/backend_2metal_2utils_8h.js new file mode 100644 index 000000000..b67a9d3f9 --- /dev/null +++ b/docs/build/html/backend_2metal_2utils_8h.js @@ -0,0 +1,14 @@ +var backend_2metal_2utils_8h = +[ + [ "mlx::core::concatenate", "namespacemlx_1_1core.html#a76a2e310857f60f5ea6f1388d45b964d", null ], + [ "mlx::core::concatenate", "namespacemlx_1_1core.html#aaf51544472fa87fa974686eacdd2a4a6", null ], + [ "mlx::core::debug_set_primitive_buffer_label", "namespacemlx_1_1core.html#a489e45b3a5cd8b46e8ea56b9132eb230", null ], + [ "mlx::core::debug_set_stream_queue_label", "namespacemlx_1_1core.html#a79817d2432e782e596c9c49a08b93be2", null ], + [ "mlx::core::get_2d_grid_dims", "namespacemlx_1_1core.html#aa9692de582995fd3ce19493b45ab7144", null ], + [ "mlx::core::get_2d_grid_dims", "namespacemlx_1_1core.html#a6ec5cdf3253a9f20ca5ea7a1590fb386", null ], + [ "mlx::core::get_block_dims", "namespacemlx_1_1core.html#a0f0f59d3ffe2d16a684e5fc093302e15", null ], + [ "mlx::core::get_primitive_string", "namespacemlx_1_1core.html#ad4be35b310a252edd80d9cf04f094a60", null ], + [ "mlx::core::make_string", "namespacemlx_1_1core.html#aed148d95e7b5221f1312473deded0d27", null ], + [ "mlx::core::type_to_name", "namespacemlx_1_1core.html#af1fdfdaa5644394362e6baba30701bae", null ], + [ "mlx::core::type_to_name", "namespacemlx_1_1core.html#aef60e3a8d9c987c9c338b193673d2164", null ] +]; \ No newline at end of file diff --git a/docs/build/html/backend_2metal_2utils_8h_source.html b/docs/build/html/backend_2metal_2utils_8h_source.html index b6e4ce92c..b316e102c 100644 --- a/docs/build/html/backend_2metal_2utils_8h_source.html +++ b/docs/build/html/backend_2metal_2utils_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/utils.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
- -
-
utils.h
@@ -115,89 +129,91 @@ $(function(){ initResizable(false); });
22// - overall size (product of non-broadcasted dimensions) is < UINT_MAX^2
23// - shape and strides correspond to a contiguous (no holes) but
24// possibly broadcasted array
- -
26 const std::vector<int>& shape,
-
27 const std::vector<size_t>& strides);
-
28
-
29// Same as above but we do an implicit division with divisor.
-
30// Basically, equivalent to factorizing
-
31// Prod(s \forall s in shape if strides[s] > 0) / divisor.
- -
33 const std::vector<int>& shape,
-
34 const std::vector<size_t>& strides,
-
35 size_t divisor);
-
36
-
-
37inline NS::String* make_string(std::ostringstream& os) {
-
38 std::string string = os.str();
-
39 return NS::String::string(string.c_str(), NS::UTF8StringEncoding);
-
40}
+
25MTL::Size get_2d_grid_dims(const Shape& shape, const Strides& strides);
+
26
+
27// Same as above but we do an implicit division with divisor.
+
28// Basically, equivalent to factorizing
+
29// Prod(s \forall s in shape if strides[s] > 0) / divisor.
+
30MTL::Size
+
31get_2d_grid_dims(const Shape& shape, const Strides& strides, size_t divisor);
+
32
+
+
33inline NS::String* make_string(std::ostringstream& os) {
+
34 std::string string = os.str();
+
35 return NS::String::string(string.c_str(), NS::UTF8StringEncoding);
+
36}
-
41
-
-
42inline void debug_set_stream_queue_label(MTL::CommandQueue* queue, int index) {
-
43#ifdef MLX_METAL_DEBUG
-
44 std::ostringstream label;
-
45 label << "Stream " << index;
-
46 queue->setLabel(make_string(label));
-
47#endif
-
48}
+
37
+
+
38inline void debug_set_stream_queue_label(MTL::CommandQueue* queue, int index) {
+
39#ifdef MLX_METAL_DEBUG
+
40 std::ostringstream label;
+
41 label << "Stream " << index;
+
42 queue->setLabel(make_string(label));
+
43#endif
+
44}
-
49
-
- -
51 MTL::CommandBuffer* command_buffer,
-
52 Primitive& primitive) {
-
53#ifdef MLX_METAL_DEBUG
-
54 std::ostringstream label;
-
55 if (auto cbuf_label = command_buffer->label(); cbuf_label) {
-
56 label << cbuf_label->utf8String();
-
57 }
-
58 primitive.print(label);
-
59 command_buffer->setLabel(make_string(label));
-
60#endif
-
61}
+
45
+
+ +
47 MTL::CommandBuffer* command_buffer,
+
48 Primitive& primitive) {
+
49#ifdef MLX_METAL_DEBUG
+
50 std::ostringstream label;
+
51 if (auto cbuf_label = command_buffer->label(); cbuf_label) {
+
52 label << cbuf_label->utf8String();
+
53 }
+
54 primitive.print(label);
+
55 command_buffer->setLabel(make_string(label));
+
56#endif
+
57}
-
62
-
63std::string get_primitive_string(Primitive* primitive);
-
64
-
65template <typename T>
-
-
66void concatenate(std::string& acc, T first) {
-
67 acc += first;
-
68}
+
58
+
59std::string get_primitive_string(Primitive* primitive);
+
60
+
61template <typename T>
+
+
62void concatenate(std::string& acc, T first) {
+
63 acc += first;
+
64}
-
69
-
70template <typename T, typename... Args>
-
-
71void concatenate(std::string& acc, T first, Args... args) {
-
72 acc += first;
-
73 concatenate(acc, args...);
-
74}
+
65
+
66template <typename T, typename... Args>
+
+
67void concatenate(std::string& acc, T first, Args... args) {
+
68 acc += first;
+
69 concatenate(acc, args...);
+
70}
-
75
-
76} // namespace mlx::core
+
71
+
72} // namespace mlx::core
Definition primitives.h:48
virtual void print(std::ostream &os)=0
Print the primitive.
-
Definition array.h:23
+
Definition array.h:24
Definition allocator.h:7
MTL::Size get_block_dims(int dim0, int dim1, int dim2, int pow2=10)
-
void debug_set_primitive_buffer_label(MTL::CommandBuffer *command_buffer, Primitive &primitive)
Definition utils.h:50
-
void concatenate(std::string &acc, T first)
Definition utils.h:66
-
void debug_set_stream_queue_label(MTL::CommandQueue *queue, int index)
Definition utils.h:42
-
MTL::Size get_2d_grid_dims(const std::vector< int > &shape, const std::vector< size_t > &strides)
+
void debug_set_primitive_buffer_label(MTL::CommandBuffer *command_buffer, Primitive &primitive)
Definition utils.h:46
+
std::vector< ShapeElem > Shape
Definition array.h:21
+
void concatenate(std::string &acc, T first)
Definition utils.h:62
+
void debug_set_stream_queue_label(MTL::CommandQueue *queue, int index)
Definition utils.h:38
+
std::vector< int64_t > Strides
Definition array.h:22
+
MTL::Size get_2d_grid_dims(const Shape &shape, const Strides &strides)
+
std::vector< array > Args
Definition export.h:11
std::string get_primitive_string(Primitive *primitive)
-
NS::String * make_string(std::ostringstream &os)
Definition utils.h:37
+
NS::String * make_string(std::ostringstream &os)
Definition utils.h:33
std::string type_to_name(const Dtype &t)
Definition dtype.h:13
- -
+ + diff --git a/docs/build/html/bf16__math_8h.html b/docs/build/html/bf16__math_8h.html index da7db6474..d15f9ea21 100644 --- a/docs/build/html/bf16__math_8h.html +++ b/docs/build/html/bf16__math_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/bf16_math.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
Namespaces | @@ -560,10 +574,13 @@ Functions
- -
+ + diff --git a/docs/build/html/bf16__math_8h.js b/docs/build/html/bf16__math_8h.js new file mode 100644 index 000000000..eb88f1fc1 --- /dev/null +++ b/docs/build/html/bf16__math_8h.js @@ -0,0 +1,179 @@ +var bf16__math_8h = +[ + [ "instantiate_metal_math_funcs", "bf16__math_8h.html#a9e9f0fdd6e304522bc88acd22c576842", null ], + [ "instantiate_metal_simd_comm_funcs", "bf16__math_8h.html#aecc11cb898846d01bfc9faa109fcf791", null ], + [ "instantiate_metal_simd_reduction_funcs", "bf16__math_8h.html#a51688bc24fc9292aaec5f54a58eaa2d0", null ], + [ "metal::abs", "namespacemetal.html#a87c5122c60f9a12afceb9925a5b78ffb", null ], + [ "metal::fast::abs", "namespacemetal_1_1fast.html#a90d2973f71f83180e7f02e38d11c7a8f", null ], + [ "metal::precise::abs", "namespacemetal_1_1precise.html#a99f2b2746e813b9ca7b4249afbaf2a14", null ], + [ "metal::acos", "namespacemetal.html#ad4537748b3c832b6569ff7ccb209fcb2", null ], + [ "metal::fast::acos", "namespacemetal_1_1fast.html#a805ce5c3a94b618b7349d70bbb82f0b2", null ], + [ "metal::precise::acos", "namespacemetal_1_1precise.html#a8a2bcc89fc0b7e74f0453f82f89a8604", null ], + [ "metal::acosh", "namespacemetal.html#a2d0efb92b7f61eff342d776bd6c5f3a0", null ], + [ "metal::fast::acosh", "namespacemetal_1_1fast.html#afb656fc3406649a238b6f1e0509de751", null ], + [ "metal::precise::acosh", "namespacemetal_1_1precise.html#a1f489fabffab969b8677b56bb1136067", null ], + [ "metal::asin", "namespacemetal.html#a16e843194df3fd136404bf80ba5ac95c", null ], + [ "metal::fast::asin", "namespacemetal_1_1fast.html#a769455a283da99654b6e42c3acf13eb1", null ], + [ "metal::precise::asin", "namespacemetal_1_1precise.html#adc7b8b6e12e320cb32030f728dcbf438", null ], + [ "metal::asinh", "namespacemetal.html#abcc3251866930cfe880f89e7473d0e63", null ], + [ "metal::fast::asinh", "namespacemetal_1_1fast.html#a4367034b7b3e14310803bb2be975a556", null ], + [ "metal::precise::asinh", "namespacemetal_1_1precise.html#aaad1cdde6687c8011fbc5fda1bb13424", null ], + [ "metal::atan", "namespacemetal.html#a80a771553d9a0012b93620d19c48b00f", null ], + [ "metal::fast::atan", "namespacemetal_1_1fast.html#a769503b4b7f89071d0983258c5a3ac5a", null ], + [ "metal::precise::atan", "namespacemetal_1_1precise.html#aaaf4b5f4786a912089bbf0ae7619a6be", null ], + [ "metal::atan2", "namespacemetal.html#a1d430793eaa38ccf0d07145e3fcd1e61", null ], + [ "metal::fast::atan2", "namespacemetal_1_1fast.html#a00e687ea46f5affe26e6aef8fd62b89a", null ], + [ "metal::precise::atan2", "namespacemetal_1_1precise.html#a6f161b049cc6884f87b09b33c2d1cd7f", null ], + [ "metal::atanh", "namespacemetal.html#a57116427997ba71dd3863bfb15de33bf", null ], + [ "metal::fast::atanh", "namespacemetal_1_1fast.html#af24608fc605db9a14427d37c36dc1c53", null ], + [ "metal::precise::atanh", "namespacemetal_1_1precise.html#a902994837653b90c47f4285673e712c4", null ], + [ "metal::ceil", "namespacemetal.html#ad63204d38bc01df6ffc64583f7886b3c", null ], + [ "metal::fast::ceil", "namespacemetal_1_1fast.html#a97b0bbd79f1f45d9d3104d712914e6b8", null ], + [ "metal::precise::ceil", "namespacemetal_1_1precise.html#a8577549a1afeea206dd9a2004af2868d", null ], + [ "metal::cos", "namespacemetal.html#a2fa4778a6fe2fa43253ea724e5a608a3", null ], + [ "metal::fast::cos", "namespacemetal_1_1fast.html#a75b6bb32fa3870eda46a7bfc9f481f88", null ], + [ "metal::precise::cos", "namespacemetal_1_1precise.html#ac4941f62e7d8ab9d7cabbd967aa9f220", null ], + [ "metal::cosh", "namespacemetal.html#a8a68a88cc110830d057dbd71431b93c0", null ], + [ "metal::fast::cosh", "namespacemetal_1_1fast.html#a31544ad9de28012a4ddda86e3966a77e", null ], + [ "metal::precise::cosh", "namespacemetal_1_1precise.html#a72d86d508300a9b58f4ccbbe70da4fbc", null ], + [ "metal::cospi", "namespacemetal.html#a5c2f37939ad705ddea4409d3bedb8ce1", null ], + [ "metal::fast::cospi", "namespacemetal_1_1fast.html#a9906b41f75319b384ffb570cc94d67ce", null ], + [ "metal::precise::cospi", "namespacemetal_1_1precise.html#a2392b78bd196efdbbac65901c4ab20e7", null ], + [ "metal::divide", "namespacemetal.html#a2aea493fc1a874970b77ed0031e965df", null ], + [ "metal::fast::divide", "namespacemetal_1_1fast.html#ae70bc2185e4649369cf7b15f5e1d48be", null ], + [ "metal::precise::divide", "namespacemetal_1_1precise.html#aec0982cdb96a08b61f51129150d82e9d", null ], + [ "metal::exp", "namespacemetal.html#ac2a0b3618d922ac014baac8189d44650", null ], + [ "metal::fast::exp", "namespacemetal_1_1fast.html#ad3dbd387b63373c29e3449609f763ede", null ], + [ "metal::precise::exp", "namespacemetal_1_1precise.html#a8d8d2d5700ce432b33cf47cf22528e8f", null ], + [ "metal::exp10", "namespacemetal.html#a4c63707d13c89364496a48906631c204", null ], + [ "metal::fast::exp10", "namespacemetal_1_1fast.html#a453122f982485cbb4e471b3ac282ee5e", null ], + [ "metal::precise::exp10", "namespacemetal_1_1precise.html#af9addb343c967da3a83e9e123a8521fd", null ], + [ "metal::exp2", "namespacemetal.html#a228201c20777848804a4d0589c1d33e7", null ], + [ "metal::fast::exp2", "namespacemetal_1_1fast.html#ac092b65a46720adaf22f6266671d2d71", null ], + [ "metal::precise::exp2", "namespacemetal_1_1precise.html#a92a880bd2197efc0da0f8f0f7ec1e4c9", null ], + [ "metal::fabs", "namespacemetal.html#a487eba718144be1325abcf66e109bb21", null ], + [ "metal::fast::fabs", "namespacemetal_1_1fast.html#a129fbd68c9df1a437e8959a25187f554", null ], + [ "metal::precise::fabs", "namespacemetal_1_1precise.html#ae4c71d8bc8ef291036a7aaa05f8be3d1", null ], + [ "metal::fast::fdim", "namespacemetal_1_1fast.html#a667df76100d5ea0ce5860ddae3e5a00b", null ], + [ "metal::fdim", "namespacemetal.html#a85a560794be56d8116889c1ee2d78761", null ], + [ "metal::precise::fdim", "namespacemetal_1_1precise.html#af693e7c93de446e80dd1377f5e9e7260", null ], + [ "metal::fast::floor", "namespacemetal_1_1fast.html#ac012ce1701c2339914f15cce9f2c632f", null ], + [ "metal::floor", "namespacemetal.html#a020790f30c28a9982c4a83deaa258277", null ], + [ "metal::precise::floor", "namespacemetal_1_1precise.html#a66e02b028e3cecfe7c80773460dc7925", null ], + [ "metal::fast::fma", "namespacemetal_1_1fast.html#aebcd6e951da6f7157ec219eb7a8f1ddd", null ], + [ "metal::fma", "namespacemetal.html#a6301a78d69ff14a06194ca85a0c7d326", null ], + [ "metal::precise::fma", "namespacemetal_1_1precise.html#a49391a64d6b66fe3a212516b316a2144", null ], + [ "metal::fast::fmax", "namespacemetal_1_1fast.html#a26e3257cf877154f8a0d434be0bdb034", null ], + [ "metal::fmax", "namespacemetal.html#a0558e56fdb94b456deea6a4eb53964ed", null ], + [ "metal::precise::fmax", "namespacemetal_1_1precise.html#ac7d49f921c2883caf9eec66efc4de1cd", null ], + [ "metal::fast::fmax3", "namespacemetal_1_1fast.html#a5c6a3a389f348e1f92e8392b765a32c7", null ], + [ "metal::fmax3", "namespacemetal.html#ae0c1a7ba1a7449adc64d00b2a29e67f6", null ], + [ "metal::precise::fmax3", "namespacemetal_1_1precise.html#adf750e51bd83d569994d0967029e3bdc", null ], + [ "metal::fast::fmedian3", "namespacemetal_1_1fast.html#a923869181c3f576f2d86fba5bfa85633", null ], + [ "metal::fmedian3", "namespacemetal.html#aa35227450d943fb88cf43162aa9d8c49", null ], + [ "metal::precise::fmedian3", "namespacemetal_1_1precise.html#a48d1d0be889de4043b775bb6b030a989", null ], + [ "metal::fast::fmin", "namespacemetal_1_1fast.html#a7e202ec52bf12bfabdf2265b300acbfa", null ], + [ "metal::fmin", "namespacemetal.html#a66ac19825ea79b8294e243ae6d0b3d3c", null ], + [ "metal::precise::fmin", "namespacemetal_1_1precise.html#a18df8eb481dfa56c92ad31b5bab8e069", null ], + [ "metal::fast::fmin3", "namespacemetal_1_1fast.html#a9531c6a4a520927523961e6eb6b94c1a", null ], + [ "metal::fmin3", "namespacemetal.html#ae2acd25f2241f00aaf89ff48f132a879", null ], + [ "metal::precise::fmin3", "namespacemetal_1_1precise.html#a5bb710e6742996d32225a8f54a0f116c", null ], + [ "metal::fast::fmod", "namespacemetal_1_1fast.html#adbec09f18a89f773d7e368ef04a69526", null ], + [ "metal::fmod", "namespacemetal.html#a2ff952d4d596a7969b2a3035fc2fda58", null ], + [ "metal::precise::fmod", "namespacemetal_1_1precise.html#aa99937178a1fc8158054e328eeeae648", null ], + [ "metal::fast::fract", "namespacemetal_1_1fast.html#aa8bb448827503e485eb649eb3edb2d4c", null ], + [ "metal::fract", "namespacemetal.html#a6b1c15d251aeaacb1f4338a5e152ae78", null ], + [ "metal::precise::fract", "namespacemetal_1_1precise.html#a0f21c19332a90df1a8ff507a813b5757", null ], + [ "metal::fast::frexp", "namespacemetal_1_1fast.html#a23902df22aeaa859ef673a36381387c2", null ], + [ "metal::frexp", "namespacemetal.html#ac89d4ef524d21a301da6c37dbd95ff9f", null ], + [ "metal::precise::frexp", "namespacemetal_1_1precise.html#a0fbb1624c308b97380f894f92fd858b4", null ], + [ "metal::fast::ldexp", "namespacemetal_1_1fast.html#adb045765987e76c7ad4b511fab0c867e", null ], + [ "metal::ldexp", "namespacemetal.html#a3deed001738b6f03accd3c2195586c2b", null ], + [ "metal::precise::ldexp", "namespacemetal_1_1precise.html#aa0462827a08a9f475fdaeb104c98b6ab", null ], + [ "metal::fast::log", "namespacemetal_1_1fast.html#aef942e7f9e5c2e58c58644ab1bdd58d1", null ], + [ "metal::log", "namespacemetal.html#a423a9f4f2fc7ef5ec7eda061277b51b6", null ], + [ "metal::precise::log", "namespacemetal_1_1precise.html#a341c2b8c27d1bed860f85f8b355023d4", null ], + [ "metal::fast::log10", "namespacemetal_1_1fast.html#a0d1150cf2deee5100a7ea2988b3bb39e", null ], + [ "metal::log10", "namespacemetal.html#a042b98827baa910e9d726227cec55a80", null ], + [ "metal::precise::log10", "namespacemetal_1_1precise.html#a44239067e8e9248b1574353f98e94d72", null ], + [ "metal::fast::log2", "namespacemetal_1_1fast.html#a986ef245dd433ae62af864f5cbb07118", null ], + [ "metal::log2", "namespacemetal.html#ae894dd5fc13799f120b55cab6267c89c", null ], + [ "metal::precise::log2", "namespacemetal_1_1precise.html#a632dbbdcc1a465cf4739a14306147573", null ], + [ "metal::fast::max", "namespacemetal_1_1fast.html#a747e2e58092a27fb8b4dd3d16934fb52", null ], + [ "metal::max", "namespacemetal.html#a853c80479ab2264d9c4587c7bcac767b", null ], + [ "metal::precise::max", "namespacemetal_1_1precise.html#a6a954a4e4e3753303d1dc734855a185f", null ], + [ "metal::fast::max3", "namespacemetal_1_1fast.html#a6fc2cf18ffa8149561864c86dba0f803", null ], + [ "metal::max3", "namespacemetal.html#a00f9c0ad66d969794614f56912eed9c9", null ], + [ "metal::precise::max3", "namespacemetal_1_1precise.html#ac490e8614ebd2c9343af1ae6c0d4e82c", null ], + [ "metal::fast::median3", "namespacemetal_1_1fast.html#a742b55f1e4369921ee7f60d70185bfbc", null ], + [ "metal::median3", "namespacemetal.html#aa3ff49457ce3c93fc1c0897fd1525157", null ], + [ "metal::precise::median3", "namespacemetal_1_1precise.html#a14555ff99c4388493fec48e070144ae2", null ], + [ "metal::fast::min", "namespacemetal_1_1fast.html#a3e958e56a4712687c381a0b64d123e61", null ], + [ "metal::min", "namespacemetal.html#a6653b28c9473087141eddce39878d4d3", null ], + [ "metal::precise::min", "namespacemetal_1_1precise.html#afed0da2f7df3505b5dffa2389c3cb36e", null ], + [ "metal::fast::min3", "namespacemetal_1_1fast.html#a606a4c1b34ce05ea89ca5af81724036f", null ], + [ "metal::min3", "namespacemetal.html#a005510c8c0f964ce2b8aad3ba76a7a3f", null ], + [ "metal::precise::min3", "namespacemetal_1_1precise.html#a4d37ce31c3549ca4772a4ee29798e231", null ], + [ "metal::fast::nextafter", "namespacemetal_1_1fast.html#a4583e8be04fc0bd475b97b0934604f23", null ], + [ "metal::nextafter", "namespacemetal.html#a9547fd7b09164931986f6db4813bd72d", null ], + [ "metal::precise::nextafter", "namespacemetal_1_1precise.html#ad012ceeb55b77f1533749b351331e026", null ], + [ "metal::fast::pow", "namespacemetal_1_1fast.html#ade2367eaec894bd2e14a1351c363e003", null ], + [ "metal::pow", "namespacemetal.html#acd288d4552215bd10455584a214c57b8", null ], + [ "metal::precise::pow", "namespacemetal_1_1precise.html#a4cce64f1f20c1c6dfd29115bdb7c8d42", null ], + [ "metal::fast::powr", "namespacemetal_1_1fast.html#a4293cbc94175b4dcc724fe4747eb5d5a", null ], + [ "metal::powr", "namespacemetal.html#ae529e431f178bafedc18a889323c0bc2", null ], + [ "metal::precise::powr", "namespacemetal_1_1precise.html#ac9dbab0bd99b2b94e364aba5353bdcd7", null ], + [ "metal::fast::rint", "namespacemetal_1_1fast.html#aa613bc252f8d8069e175ec9e9d05a7ec", null ], + [ "metal::precise::rint", "namespacemetal_1_1precise.html#ab17bd408098270ad92f37bcd1039c254", null ], + [ "metal::rint", "namespacemetal.html#a29ab6060527120eee745aec0daa06e01", null ], + [ "metal::fast::round", "namespacemetal_1_1fast.html#a4cb687257a004726d49e496417eaa40f", null ], + [ "metal::precise::round", "namespacemetal_1_1precise.html#a5295ab08055d12534cc3775da855ac12", null ], + [ "metal::round", "namespacemetal.html#a46c667e169ff9d51a9204a045305442f", null ], + [ "metal::fast::rsqrt", "namespacemetal_1_1fast.html#aa62097c750f1e4b69d09277f19976ab1", null ], + [ "metal::precise::rsqrt", "namespacemetal_1_1precise.html#afb397b477745f12a44423934fa2b05ac", null ], + [ "metal::rsqrt", "namespacemetal.html#a1cf4b605c0aa7ff5bfe5e979a16f5157", null ], + [ "metal::simd_broadcast", "namespacemetal.html#a498f1e85107eb5f01ba4435977f8efe0", null ], + [ "metal::simd_max", "namespacemetal.html#a048cad0aca52cb737ebf103e76bd1c49", null ], + [ "metal::simd_min", "namespacemetal.html#ae9e2a23e00724ba2d7868bc4112b386b", null ], + [ "metal::simd_prefix_exclusive_product", "namespacemetal.html#a5ca40242390b632f737e29636829b2e4", null ], + [ "metal::simd_prefix_exclusive_sum", "namespacemetal.html#abfbb70c7471f28bf7ff36a612ad014b2", null ], + [ "metal::simd_prefix_inclusive_product", "namespacemetal.html#a6ca6a7e1996228fa536e969e9e45c446", null ], + [ "metal::simd_prefix_inclusive_sum", "namespacemetal.html#a567acb18199ac0107712eb8cb8aeb8e9", null ], + [ "metal::simd_product", "namespacemetal.html#ac6e883a04e2265a9790d7db76059e1b4", null ], + [ "metal::simd_shuffle", "namespacemetal.html#a259ed115bc3c58f88eb35830916b26d4", null ], + [ "metal::simd_shuffle_and_fill_down", "namespacemetal.html#a0ee6239fa29a5f9ee0201e0dc5ddc8e0", null ], + [ "metal::simd_shuffle_and_fill_down", "namespacemetal.html#ae29a06f0eac636ad7af21dea5b04938b", null ], + [ "metal::simd_shuffle_and_fill_up", "namespacemetal.html#a5138d5cdc18139e135707916a243cd8e", null ], + [ "metal::simd_shuffle_and_fill_up", "namespacemetal.html#a1ca14116bf50639b214d8414b5bbaaa6", null ], + [ "metal::simd_shuffle_down", "namespacemetal.html#af6e2dd7ae087aba6abac4f0350b7611c", null ], + [ "metal::simd_shuffle_rotate_down", "namespacemetal.html#a4bb203647a421032db47e73cd649841b", null ], + [ "metal::simd_shuffle_rotate_up", "namespacemetal.html#a729b22077d6c944491a6027c18ea80c9", null ], + [ "metal::simd_shuffle_up", "namespacemetal.html#afe81c5fbde3f4890458b081909242c55", null ], + [ "metal::simd_shuffle_xor", "namespacemetal.html#a5017efc9605e069cfb507137cd1a1852", null ], + [ "metal::simd_sum", "namespacemetal.html#a85181e37a00cb4a4217f1bb25389bce5", null ], + [ "metal::simd_xor", "namespacemetal.html#a1308decbf2d5c33d34d6be523ea1c30f", null ], + [ "metal::fast::sin", "namespacemetal_1_1fast.html#a3af771cfe7a135104f9d063147dba270", null ], + [ "metal::precise::sin", "namespacemetal_1_1precise.html#a71acf77ffd29c56f56afae0195c98a1c", null ], + [ "metal::sin", "namespacemetal.html#a619a159ca5f2ddfe3647d3a6bb6e804c", null ], + [ "metal::fast::sinh", "namespacemetal_1_1fast.html#a990d90b3440e38d1fb4ff5065c6c189b", null ], + [ "metal::precise::sinh", "namespacemetal_1_1precise.html#abc8f4f59dd6e7204ab5d84f0af96331c", null ], + [ "metal::sinh", "namespacemetal.html#a83ba4235ae350ab8880a9df09158620b", null ], + [ "metal::fast::sinpi", "namespacemetal_1_1fast.html#ab07a32fe544aa304577d29e0251e87b2", null ], + [ "metal::precise::sinpi", "namespacemetal_1_1precise.html#a78b17dab93519d9c82c2575dafec49c9", null ], + [ "metal::sinpi", "namespacemetal.html#ae9655f7fa2ba6c0625ca25fbb278e269", null ], + [ "metal::fast::sqrt", "namespacemetal_1_1fast.html#a4218a85c7d8a74cb8055b4755205627e", null ], + [ "metal::precise::sqrt", "namespacemetal_1_1precise.html#acb213467361cd2cab93a8d5ea1aa5bfd", null ], + [ "metal::sqrt", "namespacemetal.html#ab3f4d4852ca0e591104fbd8e5b50d31b", null ], + [ "metal::fast::tan", "namespacemetal_1_1fast.html#ae34754afa152a6170ac2ae3294174506", null ], + [ "metal::precise::tan", "namespacemetal_1_1precise.html#a8261ed22f03122ef15b89512358acb1f", null ], + [ "metal::tan", "namespacemetal.html#a862215a8ddacb086296ba02567c9b158", null ], + [ "metal::fast::tanh", "namespacemetal_1_1fast.html#a13e6e6ae087b7c558e9a94ddbc864d43", null ], + [ "metal::precise::tanh", "namespacemetal_1_1precise.html#a741c27a10cc968dd1e63473d9fcd8f99", null ], + [ "metal::tanh", "namespacemetal.html#aa97fc50bd6addfc6de0aae8570fe963d", null ], + [ "metal::fast::tanpi", "namespacemetal_1_1fast.html#a39b2952d4adf1400016c63243798aaf8", null ], + [ "metal::precise::tanpi", "namespacemetal_1_1precise.html#a8fae8c20deff43a8e855bba6f3ba20a5", null ], + [ "metal::tanpi", "namespacemetal.html#ae2046d163a525fc1822a9ec8a0aeaeb3", null ], + [ "metal::fast::trunc", "namespacemetal_1_1fast.html#aa62e1075e86c626d97038f16e9433415", null ], + [ "metal::precise::trunc", "namespacemetal_1_1precise.html#a334183e7a2dd49b983d072d1e8ee2b27", null ], + [ "metal::trunc", "namespacemetal.html#a93cb75a11a362bfc8310ea19c554c887", null ] +]; \ No newline at end of file diff --git a/docs/build/html/bf16__math_8h_source.html b/docs/build/html/bf16__math_8h_source.html index e060315d9..da893aaf0 100644 --- a/docs/build/html/bf16__math_8h_source.html +++ b/docs/build/html/bf16__math_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/bf16_math.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
bf16_math.h
@@ -94,7 +108,7 @@ $(function(){ initResizable(false); }); Go to the documentation of this file.
1// Copyright © 2023 Apple Inc.
2
3#pragma once
-
4
+
4
6// Metal math for bfloat16
8
9/*
@@ -320,17 +334,17 @@ $(function(){ initResizable(false); });
226namespace metal {
227
- - + +
231 float,
232 __METAL_MAYBE_FAST_MATH__);
233
-
234namespace fast {
+
234namespace fast {
235
- - + +
239 float,
240 __METAL_FAST_MATH__);
241
@@ -338,11 +352,11 @@ $(function(){ initResizable(false); });
243
-
244namespace precise {
+
244namespace precise {
245
- - + +
249 float,
250 __METAL_PRECISE_MATH__);
251
@@ -351,7 +365,7 @@ $(function(){ initResizable(false); });
253
254} // namespace metal
-
255
+
255
257// Metal simd for bfloat16
259
260#define instantiate_metal_simd_comm_funcs( \
@@ -469,26 +483,31 @@ $(function(){ initResizable(false); });
370namespace metal {
371
- - + +
375 uint16_t,
- +
379
380} // namespace metal
uint16_t bfloat16_to_uint16(const bfloat16_t x)
Definition bf16.h:308
+
struct _MLX_BFloat16 bfloat16_t
Definition bf16.h:251
bfloat16_t uint16_to_bfloat16(const uint16_t x)
Definition bf16.h:312
#define instantiate_metal_simd_reduction_funcs(itype, otype, ctype)
Definition bf16_math.h:328
#define instantiate_metal_math_funcs(itype, otype, ctype, mfast)
Definition bf16_math.h:33
#define instantiate_metal_simd_comm_funcs( itype, otype, ctype, itype_to_ctype, ctype_to_otype)
Definition bf16_math.h:260
+
Definition bf16_math.h:234
+
Definition bf16_math.h:244
Definition bf16_math.h:226
-
Definition bf16.h:48
- -
+ + diff --git a/docs/build/html/binary__ops_8h.html b/docs/build/html/binary__ops_8h.html index 23ddbbfc2..bf46a643e 100644 --- a/docs/build/html/binary__ops_8h.html +++ b/docs/build/html/binary__ops_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/binary_ops.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
@@ -154,10 +168,13 @@ Classes  
- -
+ + diff --git a/docs/build/html/binary__ops_8h.js b/docs/build/html/binary__ops_8h.js new file mode 100644 index 000000000..fb22d934e --- /dev/null +++ b/docs/build/html/binary__ops_8h.js @@ -0,0 +1,29 @@ +var binary__ops_8h = +[ + [ "Add", "struct_add.html", "struct_add" ], + [ "FloorDivide", "struct_floor_divide.html", "struct_floor_divide" ], + [ "Divide", "struct_divide.html", "struct_divide" ], + [ "Remainder", "struct_remainder.html", "struct_remainder" ], + [ "Equal", "struct_equal.html", "struct_equal" ], + [ "NaNEqual", "struct_na_n_equal.html", "struct_na_n_equal" ], + [ "Greater", "struct_greater.html", "struct_greater" ], + [ "GreaterEqual", "struct_greater_equal.html", "struct_greater_equal" ], + [ "Less", "struct_less.html", "struct_less" ], + [ "LessEqual", "struct_less_equal.html", "struct_less_equal" ], + [ "LogAddExp", "struct_log_add_exp.html", "struct_log_add_exp" ], + [ "Maximum", "struct_maximum.html", "struct_maximum" ], + [ "Minimum", "struct_minimum.html", "struct_minimum" ], + [ "Multiply", "struct_multiply.html", "struct_multiply" ], + [ "NotEqual", "struct_not_equal.html", "struct_not_equal" ], + [ "Power", "struct_power.html", "struct_power" ], + [ "Subtract", "struct_subtract.html", "struct_subtract" ], + [ "LogicalAnd", "struct_logical_and.html", "struct_logical_and" ], + [ "LogicalOr", "struct_logical_or.html", "struct_logical_or" ], + [ "BitwiseAnd", "struct_bitwise_and.html", "struct_bitwise_and" ], + [ "BitwiseOr", "struct_bitwise_or.html", "struct_bitwise_or" ], + [ "BitwiseXor", "struct_bitwise_xor.html", "struct_bitwise_xor" ], + [ "LeftShift", "struct_left_shift.html", "struct_left_shift" ], + [ "RightShift", "struct_right_shift.html", "struct_right_shift" ], + [ "ArcTan2", "struct_arc_tan2.html", "struct_arc_tan2" ], + [ "DivMod", "struct_div_mod.html", "struct_div_mod" ] +]; \ No newline at end of file diff --git a/docs/build/html/binary__ops_8h_source.html b/docs/build/html/binary__ops_8h_source.html index 5216c8201..6f818e693 100644 --- a/docs/build/html/binary__ops_8h_source.html +++ b/docs/build/html/binary__ops_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/binary_ops.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - + -
binary_ops.h
@@ -131,7 +145,7 @@ $(function(){ initResizable(false); });
28 template <>
- +
30 return trunc(x / y);
31 }
@@ -519,7 +533,8 @@ $(function(){ initResizable(false); });
296};
-
float log1p(float x)
Definition utils.h:318
+
struct _MLX_BFloat16 bfloat16_t
Definition bf16.h:251
+
float log1p(float x)
Definition utils.h:307
METAL_FUNC bfloat16_t atan2(bfloat16_t y, bfloat16_t x)
Definition bf16_math.h:250
METAL_FUNC bfloat16_t atan2(bfloat16_t y, bfloat16_t x)
Definition bf16_math.h:232
METAL_FUNC bfloat16_t cos(bfloat16_t x)
Definition bf16_math.h:232
@@ -530,7 +545,6 @@ $(function(){ initResizable(false); });
METAL_FUNC bfloat16_t max(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
METAL_FUNC bfloat16_t exp(bfloat16_t x)
Definition bf16_math.h:232
METAL_FUNC bfloat16_t pow(bfloat16_t x, bfloat16_t y)
Definition bf16_math.h:232
-
Definition bf16.h:48
Definition binary_ops.h:8
T operator()(T x, T y)
Definition binary_ops.h:10
Definition binary_ops.h:284
@@ -601,10 +615,13 @@ $(function(){ initResizable(false); });
float imag
Definition complex.h:22
float real
Definition complex.h:21
- -
+ + diff --git a/docs/build/html/class_thread_pool-members.html b/docs/build/html/class_thread_pool-members.html index da8fa4c8f..bf86e7238 100644 --- a/docs/build/html/class_thread_pool-members.html +++ b/docs/build/html/class_thread_pool-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
-
-
ThreadPool Member List
@@ -94,10 +112,12 @@ $(function(){ initResizable(false); }); ThreadPool(size_t)ThreadPoolinline ~ThreadPool()ThreadPoolinline
- -
+ + diff --git a/docs/build/html/class_thread_pool.html b/docs/build/html/class_thread_pool.html index 717b97142..39ea2e0a7 100644 --- a/docs/build/html/class_thread_pool.html +++ b/docs/build/html/class_thread_pool.html @@ -3,7 +3,7 @@ - + MLX: ThreadPool Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
MLX
+
+ +   + + + + +
+
- + - - +
+
+ +
+
+
- - +
-
-
Public Member Functions | @@ -97,8 +115,8 @@ $(function(){ initResizable(false); }); Public Member Functions  ThreadPool (size_t)   -template<class F , class... Args> -auto enqueue (F &&f, Args &&... args) -> std::future< typename std::invoke_result_t< F, Args... > > +template<class F, class... Args> +auto enqueue (F &&f, Args &&... args) -> std::future< typename std::invoke_result_t< F, Args... > >    ~ThreadPool ()   @@ -122,7 +140,7 @@ Public Member Functions -inline +inline
@@ -147,7 +165,7 @@ Public Member Functions -inline +inline
@@ -161,7 +179,7 @@ Public Member Functions
-template<class F , class... Args>
+template<class F, class... Args>
@@ -182,10 +200,13 @@ template<class F , class... Args>
  • mlx/io/threadpool.h
  • - - + + diff --git a/docs/build/html/class_thread_pool.js b/docs/build/html/class_thread_pool.js new file mode 100644 index 000000000..7ba80e792 --- /dev/null +++ b/docs/build/html/class_thread_pool.js @@ -0,0 +1,6 @@ +var class_thread_pool = +[ + [ "ThreadPool", "class_thread_pool.html#ac291710e33dbbed96ee20711080d506d", null ], + [ "~ThreadPool", "class_thread_pool.html#a44d3d2ab618970605e684efc216655eb", null ], + [ "enqueue", "class_thread_pool.html#a375fa2d63197282277be640b54e8a196", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classes.html b/docs/build/html/classes.html index e6cd951a4..609d93879 100644 --- a/docs/build/html/classes.html +++ b/docs/build/html/classes.html @@ -3,7 +3,7 @@ - +MLX: Class Index @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    auto ThreadPool::enqueue
    + +   + + + + +
    +
    - + - - - -
    -
    +
    + +
    +
    +
    +
    Class Index
    -
    A | B | C | D | E | F | G | H | I | K | L | M | N | O | P | Q | R | S | T | U | V | W | _
    +
    A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | _
    A
    -
    Abs
    Abs (mlx::core)
    Abs (mlx::core::detail)
    AccumHelper (mlx::steel)
    Add
    Add (mlx::core)
    Add (mlx::core::detail)
    add_vec (pocketfft::detail)
    add_vec< cmplx< T > > (pocketfft::detail)
    AddMM (mlx::core)
    AffineQuantize (mlx::core::fast)
    aligned_allocator (pocketfft::detail::threading)
    AllGather (mlx::core::distributed)
    Allocator (mlx::core::allocator)
    AllReduce (mlx::core::distributed)
    And
    Arange (mlx::core)
    ArcCos
    ArcCos (mlx::core)
    ArcCos (mlx::core::detail)
    ArcCosh
    ArcCosh (mlx::core)
    ArcCosh (mlx::core::detail)
    ArcSin
    ArcSin (mlx::core)
    ArcSin (mlx::core::detail)
    ArcSinh
    ArcSinh (mlx::core)
    ArcSinh (mlx::core::detail)
    ArcTan
    ArcTan (mlx::core)
    ArcTan (mlx::core::detail)
    ArcTan2
    ArcTan2 (mlx::core)
    ArcTan2 (mlx::core::detail)
    ArcTanh
    ArcTanh (mlx::core)
    ArcTanh (mlx::core::detail)
    ArgPartition (mlx::core)
    ArgReduce (mlx::core)
    ArgSort (mlx::core)
    arr (pocketfft::detail)
    arr_info (pocketfft::detail)
    array (mlx::core)
    array::ArrayIterator (mlx::core)
    AsStrided (mlx::core)
    AsType (mlx::core)
    AttnParams (mlx::steel)
    +
    Abs
    Abs (mlx::core)
    Abs (mlx::core::detail)
    AccumHelper (mlx::steel)
    Add
    Add (mlx::core)
    Add (mlx::core::detail)
    add_vec (pocketfft::detail)
    add_vec< cmplx< T > > (pocketfft::detail)
    AddMM (mlx::core)
    AffineQuantize (mlx::core::fast)
    aligned_allocator (pocketfft::detail::threading)
    AllGather (mlx::core::distributed)
    Allocator (mlx::core::allocator)
    AllReduce (mlx::core::distributed)
    And
    Arange (mlx::core)
    ArcCos
    ArcCos (mlx::core)
    ArcCos (mlx::core::detail)
    ArcCosh
    ArcCosh (mlx::core)
    ArcCosh (mlx::core::detail)
    ArcSin
    ArcSin (mlx::core)
    ArcSin (mlx::core::detail)
    ArcSinh
    ArcSinh (mlx::core)
    ArcSinh (mlx::core::detail)
    ArcTan
    ArcTan (mlx::core)
    ArcTan (mlx::core::detail)
    ArcTan2
    ArcTan2 (mlx::core)
    ArcTan2 (mlx::core::detail)
    ArcTanh
    ArcTanh (mlx::core)
    ArcTanh (mlx::core::detail)
    ArgPartition (mlx::core)
    ArgReduce (mlx::core)
    ArgSort (mlx::core)
    arr (pocketfft::detail)
    arr_info (pocketfft::detail)
    array (mlx::core)
    array::ArrayIterator (mlx::core)
    AsStrided (mlx::core)
    AsType (mlx::core)
    AttnParams (mlx::steel)
    B
    -
    BaseMMAFrag (mlx::steel)
    BaseMMAFrag< T, 8, 8 > (mlx::steel)
    _MLX_BFloat16::bits_to_bfloat_struct
    BitwiseAnd
    BitwiseAnd (mlx::core::detail)
    BitwiseBinary (mlx::core)
    BitwiseOr
    BitwiseOr (mlx::core::detail)
    BitwiseXor
    BitwiseXor (mlx::core::detail)
    BlockLoader (mlx::steel)
    BlockLoaderT (mlx::steel)
    BlockMaskedMM (mlx::core)
    BlockMergeSort
    BlockMMA (mlx::steel)
    BlockSwizzle (mlx::steel)
    bool4_or_uint
    Broadcast (mlx::core)
    Buffer (mlx::core::allocator)
    +
    BaseMMAFrag (mlx::steel)
    BaseMMAFrag< T, 8, 8 > (mlx::steel)
    numeric_limits< bfloat16_t >::bfloat_or_bits (mlx::core)
    _MLX_BFloat16::bits_to_bfloat_struct
    BitwiseAnd
    BitwiseAnd (mlx::core::detail)
    BitwiseBinary (mlx::core)
    BitwiseOr
    BitwiseOr (mlx::core::detail)
    BitwiseXor
    BitwiseXor (mlx::core::detail)
    BlockLoader (mlx::steel)
    BlockLoaderT (mlx::steel)
    BlockMaskedMM (mlx::core)
    BlockMergeSort
    BlockMMA (mlx::steel)
    BlockSwizzle (mlx::steel)
    bool4_or_uint
    Broadcast (mlx::core)
    BroadcastAxes (mlx::core)
    Buffer (mlx::core::allocator)
    Buffer (mlx::core::metal)
    C
    -
    Ceil
    Ceil (mlx::core)
    Ceil (mlx::core::detail)
    cfftp (pocketfft::detail)
    ChannelHelper (mlx::steel)
    ChannelHelper< 1 > (mlx::steel)
    ChannelHelper< 2 > (mlx::steel)
    ChannelHelper< 3 > (mlx::steel)
    ChannelHelper< 4 > (mlx::steel)
    Cholesky (mlx::core)
    cmplx (pocketfft::detail)
    cndarr (pocketfft::detail)
    CommandEncoder (mlx::core::metal)
    CommonAllocator (mlx::core::allocator)
    Compiled (mlx::core)
    complex128_t (mlx::core)
    complex64_t
    complex64_t (mlx::core)
    Concatenate (mlx::core)
    concurrent_queue (pocketfft::detail::threading)
    CommandEncoder::ConcurrentContext (mlx::core::metal)
    ConditionalType
    ConditionalType< true, T, U >
    Conjugate
    Conjugate (mlx::core)
    Conjugate (mlx::core::detail)
    Contiguous (mlx::core)
    ContiguousIterator (mlx::core)
    Conv2DGeneralBaseInfo (mlx::steel)
    Conv2DGeneralJumpParams (mlx::steel)
    Conv2DInputBlockLoaderGeneral (mlx::steel)
    Conv2DInputBlockLoaderLargeFilter (mlx::steel)
    Conv2DInputBlockLoaderSmallChannels (mlx::steel)
    Conv2DInputBlockLoaderSmallFilter (mlx::steel)
    Conv2DWeightBlockLoader (mlx::steel)
    Conv2DWeightBlockLoaderGeneral (mlx::steel)
    Conv2DWeightBlockLoaderSmallChannels (mlx::steel)
    Convolution (mlx::core)
    Copy (mlx::core)
    Cos
    Cos (mlx::core)
    Cos (mlx::core::detail)
    Cosh
    Cosh (mlx::core)
    Cosh (mlx::core::detail)
    CShape (mlx::steel)
    CumMax
    CumMin
    CumProd
    CumProd< bool >
    CumSum
    Custom (mlx::core::fast)
    CustomKernel (mlx::core::fast)
    CustomKernelShapeInfo (mlx::core::fast)
    CustomTransforms (mlx::core)
    +
    Ceil
    Ceil (mlx::core)
    Ceil (mlx::core::detail)
    cfftp (pocketfft::detail)
    ChannelHelper (mlx::steel)
    ChannelHelper< 1 > (mlx::steel)
    ChannelHelper< 2 > (mlx::steel)
    ChannelHelper< 3 > (mlx::steel)
    ChannelHelper< 4 > (mlx::steel)
    Cholesky (mlx::core)
    cmplx (pocketfft::detail)
    cndarr (pocketfft::detail)
    CommandEncoder (mlx::core)
    CommandEncoder (mlx::core::metal)
    CommonAllocator (mlx::core::allocator)
    Compiled (mlx::core)
    complex128_t (mlx::core)
    complex64_t
    complex64_t (mlx::core)
    Concatenate (mlx::core)
    concurrent_queue (pocketfft::detail::threading)
    CommandEncoder::ConcurrentContext (mlx::core)
    CommandEncoder::ConcurrentContext (mlx::core::metal)
    ConditionalType
    ConditionalType< true, T, U >
    Conjugate
    Conjugate (mlx::core)
    Conjugate (mlx::core::detail)
    Contiguous (mlx::core)
    ContiguousIterator (mlx::core)
    Conv2DGeneralBaseInfo (mlx::steel)
    Conv2DGeneralJumpParams (mlx::steel)
    Conv2DInputBlockLoaderGeneral (mlx::steel)
    Conv2DInputBlockLoaderLargeFilter (mlx::steel)
    Conv2DInputBlockLoaderSmallChannels (mlx::steel)
    Conv2DInputBlockLoaderSmallFilter (mlx::steel)
    Conv2DWeightBlockLoader (mlx::steel)
    Conv2DWeightBlockLoaderGeneral (mlx::steel)
    Conv2DWeightBlockLoaderSmallChannels (mlx::steel)
    Convolution (mlx::core)
    Copy (mlx::core)
    Cos
    Cos (mlx::core)
    Cos (mlx::core::detail)
    Cosh
    Cosh (mlx::core)
    Cosh (mlx::core::detail)
    CShape (mlx::steel)
    CumMax
    CumMin
    CumProd
    CumProd< bool >
    CumSum
    Custom (mlx::core::fast)
    CustomKernel (mlx::core::fast)
    CustomKernelShapeInfo (mlx::core::fast)
    CustomTransforms (mlx::core)
    D
    -
    array::Data (mlx::core)
    DefaultContiguousReduce (mlx::core)
    DefaultStridedReduce (mlx::core)
    Depends (mlx::core)
    Device (mlx::core)
    Device (mlx::core::metal)
    DeviceStream (mlx::core::metal)
    DistPrimitive (mlx::core::distributed)
    Divide
    Divide (mlx::core::detail)
    Divide (mlx::core)
    DivMod
    DivMod (mlx::core)
    DivOp
    Dtype (mlx::core)
    +
    array::Data (mlx::core)
    DefaultContiguousReduce (mlx::core)
    DefaultStridedReduce (mlx::core)
    Depends (mlx::core)
    Device (mlx::core)
    Device (mlx::core::metal)
    DeviceStream (mlx::core::metal)
    DistPrimitive (mlx::core::distributed)
    Divide
    Divide (mlx::core::detail)
    Divide (mlx::core)
    DivMod
    DivMod (mlx::core)
    DivOp
    Dtype (mlx::core)
    DynamicSlice (mlx::core)
    DynamicSliceUpdate (mlx::core)
    E
    -
    Eigh (mlx::core)
    Equal
    Equal (mlx::core::detail)
    Equal (mlx::core)
    Erf
    Erf (mlx::core::detail)
    Erf (mlx::core)
    ErfInv
    ErfInv (mlx::core::detail)
    ErfInv (mlx::core)
    Event (mlx::core)
    ExecC2C (pocketfft::detail)
    ExecDcst (pocketfft::detail)
    ExecHartley (pocketfft::detail)
    ExecR2R (pocketfft::detail)
    Exp
    Exp (mlx::core::detail)
    Exp (mlx::core)
    Expm1
    Expm1 (mlx::core::detail)
    Expm1 (mlx::core)
    ExpSubOp
    +
    Eigh (mlx::core)
    Equal
    Equal (mlx::core::detail)
    Equal (mlx::core)
    Erf
    Erf (mlx::core::detail)
    Erf (mlx::core)
    ErfInv
    ErfInv (mlx::core::detail)
    ErfInv (mlx::core)
    Event (mlx::core)
    ExecC2C (pocketfft::detail)
    ExecDcst (pocketfft::detail)
    ExecHartley (pocketfft::detail)
    ExecR2R (pocketfft::detail)
    Exp
    Exp (mlx::core::detail)
    Exp (mlx::core)
    ExpandDims (mlx::core)
    Expm1
    Expm1 (mlx::core::detail)
    Expm1 (mlx::core)
    ExpSubOp
    F
    -
    Fence (mlx::core::metal)
    FFT (mlx::core)
    fftblue (pocketfft::detail)
    FileWriter (mlx::core::io)
    array::Flags (mlx::core)
    Floor
    Floor (mlx::core::detail)
    Floor (mlx::core)
    FloorDivide
    Full (mlx::core)
    +
    Fence (mlx::core::metal)
    FFT (mlx::core)
    fftblue (pocketfft::detail)
    FileWriter (mlx::core::io)
    finfo (mlx::core)
    array::Flags (mlx::core)
    Flatten (mlx::core)
    Floor
    Floor (mlx::core::detail)
    Floor (mlx::core)
    FloorDivide
    Full (mlx::core)
    FunctionExporter (mlx::core)
    G
    -
    Gather (mlx::core)
    GatherMM (mlx::core)
    GatherQMM (mlx::core)
    GEMMAddMMParams (mlx::steel)
    GEMMKernel (mlx::steel)
    GEMMParams (mlx::steel)
    GEMMSpiltKParams (mlx::steel)
    GEMVKernel
    GEMVTKernel
    Greater
    Greater (mlx::core::detail)
    Greater (mlx::core)
    GreaterEqual
    GreaterEqual (mlx::core::detail)
    GreaterEqual (mlx::core)
    Group (mlx::core::distributed)
    +
    Gather (mlx::core)
    GatherMM (mlx::core)
    GatherQMM (mlx::core)
    GEMMAddMMParams (mlx::steel)
    GEMMKernel (mlx::steel)
    GEMMParams (mlx::steel)
    GEMMSpiltKParams (mlx::steel)
    GEMVKernel
    GEMVTKernel
    Greater
    Greater (mlx::core::detail)
    Greater (mlx::core)
    GreaterEqual
    GreaterEqual (mlx::core::detail)
    GreaterEqual (mlx::core)
    Group (mlx::core::distributed)
    GroupImpl (mlx::core::distributed::detail)
    H
    -
    Hadamard (mlx::core)
    +
    Hadamard (mlx::core)
    numeric_limits< float16_t >::half_or_bits (mlx::core)
    I
    -
    Imag
    Imag (mlx::core::detail)
    Imag (mlx::core)
    ImplicitGemmConv2DParams (mlx::steel)
    Indices
    integral_constant (mlx::steel)
    IntOrFloat (mlx::core::detail)
    InTracing (mlx::core::detail)
    Inverse (mlx::core)
    is_empty (metal)
    is_integral (mlx::steel)
    is_integral< integral_constant< T, v > > (mlx::steel)
    is_static (metal)
    +
    Imag
    Imag (mlx::core::detail)
    Imag (mlx::core)
    ImplicitGemmConv2DParams (mlx::steel)
    ImportedFunction (mlx::core)
    Indices
    integral_constant (mlx::steel)
    IntOrFloat (mlx::core::detail)
    InTracing (mlx::core::detail)
    Inverse (mlx::core)
    is_empty (metal)
    is_integral (mlx::steel)
    is_integral< integral_constant< T, v > > (mlx::steel)
    is_static (metal)
    +
    J
    +
    JitCompiler (mlx::core)
    +
    K
    KernelMergeSort
    KernelMultiBlockMergeSort
    KeySequence (mlx::core::random)
    -
    +
    L
    -
    latch (pocketfft::detail::threading)
    LayerNorm (mlx::core::fast)
    LayerNormVJP (mlx::core::fast)
    Layout2D (mlx::steel)
    LeftShift
    LeftShift (mlx::core::detail)
    Less
    Less (mlx::core::detail)
    Less (mlx::core)
    LessEqual
    LessEqual (mlx::core::detail)
    LessEqual (mlx::core)
    LessThan
    Limits
    Limits< bfloat16_t >
    Limits< bool >
    Limits< complex64_t >
    Limits< float >
    Limits< half >
    Limits< int16_t >
    Limits< int32_t >
    Limits< int64_t >
    Limits< int8_t >
    Limits< uint16_t >
    Limits< uint32_t >
    Limits< uint64_t >
    Limits< uint8_t >
    Load (mlx::core)
    Log
    Log (mlx::core::detail)
    Log (mlx::core)
    Log10
    Log10 (mlx::core::detail)
    Log1p
    Log1p (mlx::core::detail)
    Log1p (mlx::core)
    Log2
    Log2 (mlx::core::detail)
    LogAddExp
    LogAddExp (mlx::core::detail)
    LogAddExp (mlx::core)
    LogicalAnd
    LogicalAnd (mlx::core::detail)
    LogicalAnd (mlx::core)
    LogicalNot
    LogicalNot (mlx::core::detail)
    LogicalNot (mlx::core)
    LogicalOr
    LogicalOr (mlx::core::detail)
    LogicalOr (mlx::core)
    LoopAlignment (mlx::steel)
    LoopedElemToLoc
    LoopedElemToLoc< 1, OffsetT, false >
    LoopedElemToLoc< 1, OffsetT, true >
    -
    -
    M
    -
    make_void (metal)
    Matmul (mlx::core)
    Max
    Maximum
    Maximum (mlx::core::detail)
    Maximum (mlx::core)
    MaxOp
    MetalAllocator (mlx::core::metal)
    Min
    Minimum
    Minimum (mlx::core::detail)
    Minimum (mlx::core)
    mlx_atomic
    mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >
    MLXConvParams
    MMATile (mlx::steel)
    MulOp
    multi_iter (pocketfft::detail)
    Multiply (mlx::core::detail)
    Multiply (mlx::core)
    Multiply
    +
    latch (pocketfft::detail::threading)
    LayerNorm (mlx::core::fast)
    LayerNormVJP (mlx::core::fast)
    Layout2D (mlx::steel)
    LeftShift
    LeftShift (mlx::core::detail)
    Less
    Less (mlx::core::detail)
    Less (mlx::core)
    LessEqual
    LessEqual (mlx::core::detail)
    LessEqual (mlx::core)
    LessThan
    Limits
    Limits< bfloat16_t >
    Limits< bool >
    Limits< complex64_t >
    Limits< float >
    Limits< half >
    Limits< int16_t >
    Limits< int32_t >
    Limits< int64_t >
    Limits< int8_t >
    Limits< uint16_t >
    Limits< uint32_t >
    Limits< uint64_t >
    Limits< uint8_t >
    Load (mlx::core)
    Log
    Log (mlx::core::detail)
    Log (mlx::core)
    Log10
    Log10 (mlx::core::detail)
    Log1p
    Log1p (mlx::core::detail)
    Log1p (mlx::core)
    Log2
    Log2 (mlx::core::detail)
    LogAddExp
    LogAddExp (mlx::core::detail)
    LogAddExp (mlx::core)
    LogicalAnd
    LogicalAnd (mlx::core::detail)
    LogicalAnd (mlx::core)
    LogicalNot
    LogicalNot (mlx::core::detail)
    LogicalNot (mlx::core)
    LogicalOr
    LogicalOr (mlx::core::detail)
    LogicalOr (mlx::core)
    LoopAlignment (mlx::steel)
    LoopedElemToLoc
    LoopedElemToLoc< 1, OffsetT, false >
    LoopedElemToLoc< 1, OffsetT, true >
    -
    N
    -
    NaNEqual (mlx::core::detail)
    NaNEqual
    ndarr (pocketfft::detail)
    Negative (mlx::core::detail)
    Negative (mlx::core)
    Negative
    NodeNamer (mlx::core)
    None
    NotEqual (mlx::core::detail)
    NotEqual (mlx::core)
    NotEqual
    NumberOfElements (mlx::core)
    +
    M
    +
    make_void (metal)
    Matmul (mlx::core)
    Max
    Maximum
    Maximum (mlx::core::detail)
    Maximum (mlx::core)
    MaxOp
    MetalAllocator (mlx::core::metal)
    Min
    Minimum
    Minimum (mlx::core::detail)
    Minimum (mlx::core)
    mlx_atomic
    mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >
    MLXConvParams
    MMATile (mlx::steel)
    MulOp
    multi_iter (pocketfft::detail)
    Multiply (mlx::core::detail)
    Multiply (mlx::core)
    Multiply
    +
    N
    +
    NaNEqual (mlx::core::detail)
    NaNEqual
    ndarr (pocketfft::detail)
    Negative (mlx::core::detail)
    Negative (mlx::core)
    Negative
    NodeNamer (mlx::core)
    None
    NotEqual (mlx::core::detail)
    NotEqual (mlx::core)
    NotEqual
    NumberOfElements (mlx::core)
    numeric_limits (mlx::core)
    numeric_limits< bfloat16_t > (mlx::core)
    numeric_limits< float > (mlx::core)
    numeric_limits< float16_t > (mlx::core)
    +
    O
    Or
    -
    -
    P
    -
    Pad (mlx::core)
    ParallelFileReader (mlx::core::io)
    Partition (mlx::core)
    pocketfft_c (pocketfft::detail)
    pocketfft_r (pocketfft::detail)
    pointer_element (metal)
    pointer_element< constant T * > (metal)
    pointer_element< device T * > (metal)
    pointer_element< thread T * > (metal)
    pointer_element< threadgroup T * > (metal)
    Power (mlx::core::detail)
    Power (mlx::core)
    Power
    Primitive (mlx::core)
    PrintFormatter (mlx::core)
    Prod
    +
    P
    +
    Pad (mlx::core)
    ParallelFileReader (mlx::core::io)
    Partition (mlx::core)
    pocketfft_c (pocketfft::detail)
    pocketfft_r (pocketfft::detail)
    pointer_element (metal)
    pointer_element< constant T * > (metal)
    pointer_element< device T * > (metal)
    pointer_element< thread T * > (metal)
    pointer_element< threadgroup T * > (metal)
    Power (mlx::core::detail)
    Power (mlx::core)
    Power
    Primitive (mlx::core)
    PrintFormatter (mlx::core)
    Prod
    +
    Q
    QRF (mlx::core)
    QuantizedBlockLoader
    QuantizedMatmul (mlx::core)
    -
    +
    R
    RandomBits (mlx::core)
    Reader (mlx::core::io)
    BlockLoader::ReadVector (mlx::steel)
    ReadWriter
    Real (mlx::core::detail)
    Real (mlx::core)
    Real
    Recv (mlx::core::distributed)
    Reduce (mlx::core)
    ReductionPlan (mlx::core)
    Remainder (mlx::core::detail)
    Remainder (mlx::core)
    Remainder
    Reshape (mlx::core)
    ResidencySet (mlx::core::metal)
    RetainGraph (mlx::core::detail)
    rev_iter (pocketfft::detail)
    rfftp (pocketfft::detail)
    RightShift (mlx::core::detail)
    RightShift
    RMSNorm (mlx::core::fast)
    RMSNormVJP (mlx::core::fast)
    RoPE (mlx::core::fast)
    Round (mlx::core::detail)
    Round (mlx::core)
    Round
    Rsqrt (mlx::core::detail)
    Rsqrt
    -
    -
    S
    -
    ScaledDotProductAttention (mlx::core::fast)
    ScaleOp
    Scan (mlx::core)
    Scatter (mlx::core)
    Scheduler (mlx::core::scheduler)
    Select (mlx::core::detail)
    Select (mlx::core)
    Select
    Send (mlx::core::distributed)
    Shape2D (mlx::steel)
    Sigmoid (mlx::core::detail)
    Sigmoid (mlx::core)
    Sigmoid
    Sign (mlx::core::detail)
    Sign (mlx::core)
    Sign
    simple_iter (pocketfft::detail)
    Sin (mlx::core::detail)
    Sin (mlx::core)
    Sin
    sincos_2pibyn (pocketfft::detail)
    Sinh (mlx::core::detail)
    Sinh (mlx::core)
    Sinh
    Slice (mlx::core)
    SliceUpdate (mlx::core)
    Softmax (mlx::core)
    Sort (mlx::core)
    Split (mlx::core)
    Sqrt (mlx::core::detail)
    Sqrt (mlx::core)
    Sqrt
    Square (mlx::core::detail)
    Square (mlx::core)
    Square
    StopGradient (mlx::core)
    Stream (mlx::core)
    StreamContext (mlx::core)
    StreamThread (mlx::core::scheduler)
    SubOp
    Subtract (mlx::core::detail)
    Subtract (mlx::core)
    Subtract
    Sum
    SumOp
    SVD (mlx::core)
    +
    S
    +
    ScaledDotProductAttention (mlx::core::fast)
    ScaleOp
    Scan (mlx::core)
    Scatter (mlx::core)
    Scheduler (mlx::core::scheduler)
    Select (mlx::core::detail)
    Select (mlx::core)
    Select
    Send (mlx::core::distributed)
    Shape2D (mlx::steel)
    Sigmoid (mlx::core::detail)
    Sigmoid (mlx::core)
    Sigmoid
    Sign (mlx::core::detail)
    Sign (mlx::core)
    Sign
    simple_iter (pocketfft::detail)
    Sin (mlx::core::detail)
    Sin (mlx::core)
    Sin
    sincos_2pibyn (pocketfft::detail)
    Sinh (mlx::core::detail)
    Sinh (mlx::core)
    Sinh
    Slice (mlx::core)
    SliceUpdate (mlx::core)
    Softmax (mlx::core)
    Sort (mlx::core)
    Split (mlx::core)
    Sqrt (mlx::core::detail)
    Sqrt (mlx::core)
    Sqrt
    Square (mlx::core::detail)
    Square (mlx::core)
    Square
    Squeeze (mlx::core)
    StopGradient (mlx::core)
    Stream (mlx::core)
    StreamContext (mlx::core)
    StreamThread (mlx::core::scheduler)
    SubOp
    Subtract (mlx::core::detail)
    Subtract (mlx::core)
    Subtract
    Sum
    SumOp
    SVD (mlx::core)
    +
    T
    T_dcst23 (pocketfft::detail)
    T_dcst4 (pocketfft::detail)
    T_dct1 (pocketfft::detail)
    T_dst1 (pocketfft::detail)
    Tan (mlx::core::detail)
    Tan (mlx::core)
    Tan
    Tanh (mlx::core::detail)
    Tanh (mlx::core)
    Tanh
    thread_pool (pocketfft::detail::threading)
    ThreadPool
    ThreadSort
    TransformAdd (mlx::steel)
    TransformAxpby (mlx::steel)
    TransformNone (mlx::steel)
    TransformScale
    Transpose (mlx::core)
    TypeToDtype (mlx::core)
    -
    -
    U
    -
    UnaryPrimitive (mlx::core)
    Uniform (mlx::core)
    util (pocketfft::detail)
    +
    U
    +
    UnaryPrimitive (mlx::core)
    Unflatten (mlx::core)
    util (pocketfft::detail)
    +
    V
    View (mlx::core)
    VLEN (pocketfft::detail)
    VTYPE (pocketfft::detail)
    -
    +
    W
    Writer (mlx::core::io)
    -
    +
    _
    _MLX_BFloat16
    _MLX_BFloat16 (mlx::core)
    _MLX_Float16 (mlx::core)
    _NoMask
    _numeric_limits_impl< bfloat16_t > (metal)
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_abs-members.html b/docs/build/html/classmlx_1_1core_1_1_abs-members.html index f9501a713..cec693dbc 100644 --- a/docs/build/html/classmlx_1_1core_1_1_abs-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_abs-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Abs Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_abs.html b/docs/build/html/classmlx_1_1core_1_1_abs.html index 218222ac0..db1880456 100644 --- a/docs/build/html/classmlx_1_1core_1_1_abs.html +++ b/docs/build/html/classmlx_1_1core_1_1_abs.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Abs Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Abs::output_shapes std::vector< Shape > mlx::core::Abs::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_abs.js b/docs/build/html/classmlx_1_1core_1_1_abs.js new file mode 100644 index 000000000..4d998bea8 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_abs.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_abs = +[ + [ "Abs", "classmlx_1_1core_1_1_abs.html#a1247e72feb640fb562d036b2dd1ae4ad", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_abs.html#a0d3e697496ef8e842d21195cb3c14e60", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_abs.html#a0a976e636dd8505b473fbdddf949f514", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_abs.html#ab6f0ec56bc7c048382297e12dabadc67", null ], + [ "jvp", "classmlx_1_1core_1_1_abs.html#a6c1e6eeaf4f5e63898c3487106e88e11", null ], + [ "output_shapes", "classmlx_1_1core_1_1_abs.html#ac9d55481e5490423e4aaf02b95cafc75", null ], + [ "print", "classmlx_1_1core_1_1_abs.html#a643d6db5116eed978e3208804a992107", null ], + [ "vjp", "classmlx_1_1core_1_1_abs.html#aa2dd8ec0989e716b77394ac349b34592", null ], + [ "vmap", "classmlx_1_1core_1_1_abs.html#a4c9c98f1d71432fd3752ad9a6a8e7f2f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_add-members.html b/docs/build/html/classmlx_1_1core_1_1_add-members.html index ce8ca14c6..ab3e11b95 100644 --- a/docs/build/html/classmlx_1_1core_1_1_add-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_add-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Add Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_add.html b/docs/build/html/classmlx_1_1core_1_1_add.html index 9dd674b5b..4a688dedc 100644 --- a/docs/build/html/classmlx_1_1core_1_1_add.html +++ b/docs/build/html/classmlx_1_1core_1_1_add.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Add Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Add::output_shapes std::vector< Shape > mlx::core::Add::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_add.js b/docs/build/html/classmlx_1_1core_1_1_add.js new file mode 100644 index 000000000..7fd5f054e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_add.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_add = +[ + [ "Add", "classmlx_1_1core_1_1_add.html#ae3fd5483f3454eac3df256e3f5f3cdae", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_add.html#a5bacfc51dfa2a5a931bad2dd7bdc7a5f", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_add.html#aa0aacbc1e26b95a2f040f62aa4f69c3d", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_add.html#aba0a35410c3aac53d0f7a0c283d9ee3f", null ], + [ "jvp", "classmlx_1_1core_1_1_add.html#a77230069f76fe60a2fe1007822a277b7", null ], + [ "output_shapes", "classmlx_1_1core_1_1_add.html#a50877893083fd78b31aa25152f750418", null ], + [ "print", "classmlx_1_1core_1_1_add.html#a8a96345aa63724f22b68bca7b861211d", null ], + [ "vjp", "classmlx_1_1core_1_1_add.html#ac28e581862880e24ed2b99bb6a916607", null ], + [ "vmap", "classmlx_1_1core_1_1_add.html#a0e557d4d896153f84a25532562e4c646", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_add_m_m-members.html b/docs/build/html/classmlx_1_1core_1_1_add_m_m-members.html index cb669de52..cb6a2fd41 100644 --- a/docs/build/html/classmlx_1_1core_1_1_add_m_m-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_add_m_m-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::AddMM Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::AddMMinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AddMMvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::AddMMvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::AddMMinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AddMMvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::AddMMvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_add_m_m.html b/docs/build/html/classmlx_1_1core_1_1_add_m_m.html index 2a46960cb..4e63e84b5 100644 --- a/docs/build/html/classmlx_1_1core_1_1_add_m_m.html +++ b/docs/build/html/classmlx_1_1core_1_1_add_m_m.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::AddMM Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,6 +141,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +std::pair< float, float > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions virtual std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums)  The Jacobian-vector product.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -200,7 +216,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -317,7 +333,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -326,6 +342,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< float, float > mlx::core::AddMM::state () const
    +
    +inline
    +
    +
    @@ -360,7 +401,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -393,7 +434,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -409,10 +450,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_add_m_m.js b/docs/build/html/classmlx_1_1core_1_1_add_m_m.js new file mode 100644 index 000000000..d9ffb3c24 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_add_m_m.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_add_m_m = +[ + [ "AddMM", "classmlx_1_1core_1_1_add_m_m.html#a8ae4372b3f96e72e8a5a06d59de8a550", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_add_m_m.html#a15694e3bf2ed5c193237b2b9ca00867c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_add_m_m.html#a5f933be14baebc32a0be0f9a69148aa9", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_add_m_m.html#a6e37c6882dba995a63fb6d8dfb01754f", null ], + [ "print", "classmlx_1_1core_1_1_add_m_m.html#a1262ac2c4c6e9ff6b6047bf7605e5cc9", null ], + [ "state", "classmlx_1_1core_1_1_add_m_m.html#a24ab73de46d0589780dac5ade43f93b8", null ], + [ "vjp", "classmlx_1_1core_1_1_add_m_m.html#ac1562a37cec6928e01281926ebeb47c6", null ], + [ "vmap", "classmlx_1_1core_1_1_add_m_m.html#a73ce80b3a37ec2523943028d50ebce81", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arange-members.html b/docs/build/html/classmlx_1_1core_1_1_arange-members.html index c6db8da88..b44e6e9d4 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arange-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arange-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Arange Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Arangeinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Arangeinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arange.html b/docs/build/html/classmlx_1_1core_1_1_arange.html index 4b20784c5..dcfa43532 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arange.html +++ b/docs/build/html/classmlx_1_1core_1_1_arange.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Arange Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -121,9 +135,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +std::tuple< double, double, double > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -205,7 +221,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -314,7 +330,7 @@ Public Member Functions - + @@ -322,7 +338,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Arange::output_shapes std::vector< Shape > mlx::core::Arange::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -352,7 +368,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -361,16 +377,44 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::tuple< double, double, double > mlx::core::Arange::state () const
    +
    +inline
    +
    +

    The documentation for this class was generated from the following file:
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arange.js b/docs/build/html/classmlx_1_1core_1_1_arange.js new file mode 100644 index 000000000..faa597bad --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arange.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_arange = +[ + [ "Arange", "classmlx_1_1core_1_1_arange.html#a1a70c3b0b9c67d5a9446c141c5b7c574", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arange.html#aba44432491cbd599bf72712f5f4267a1", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arange.html#a7a2e9787c6c3a78b4a6df91206974031", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arange.html#a7b6a45cf9c4b109d4e0373f3fe576c35", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arange.html#a447083a1403d3d42a7ad9c307a666946", null ], + [ "print", "classmlx_1_1core_1_1_arange.html#abd73d2b793da796dc7cf04c9f7d5c19e", null ], + [ "state", "classmlx_1_1core_1_1_arange.html#ac4a9f48a11c2af03ed57fdf2422cbfad", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cos-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_cos-members.html index b313ef0e8..2fcd2a472 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_cos-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cos-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcCos Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cos.html b/docs/build/html/classmlx_1_1core_1_1_arc_cos.html index 7f4d285d3..14dabf2ca 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_cos.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cos.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcCos Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcCos::output_shapes std::vector< Shape > mlx::core::ArcCos::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cos.js b/docs/build/html/classmlx_1_1core_1_1_arc_cos.js new file mode 100644 index 000000000..3086bfe32 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cos.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_cos = +[ + [ "ArcCos", "classmlx_1_1core_1_1_arc_cos.html#a66f4ee841d17923d93241b71ea5103e9", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_cos.html#a58dcba9e706cb12bab062bb7fa5fa006", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_cos.html#a46f72d4af89b0a0f5f203783fb44589c", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_cos.html#a39557461e3235801886675a9b7d25bf5", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_cos.html#a240079c616f1a1f127aa783308096fe9", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_cos.html#a67a5025f8d7e5bac22888ad4bf813679", null ], + [ "print", "classmlx_1_1core_1_1_arc_cos.html#aa48d8bec4efbac569d809cf11648b739", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_cos.html#a78e73e5e639d1249c7fe9614bf157c92", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_cos.html#a7548e23ace6827674aa6d284d44ccf83", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cosh-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_cosh-members.html index 1c130de7a..c44d3f048 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_cosh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cosh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcCosh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cosh.html b/docs/build/html/classmlx_1_1core_1_1_arc_cosh.html index 0838fbc92..45e1f7b14 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_cosh.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cosh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcCosh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcCosh::output_shapes std::vector< Shape > mlx::core::ArcCosh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_cosh.js b/docs/build/html/classmlx_1_1core_1_1_arc_cosh.js new file mode 100644 index 000000000..266fd022e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_cosh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_cosh = +[ + [ "ArcCosh", "classmlx_1_1core_1_1_arc_cosh.html#a34597054db467941a2a883c653ba4d71", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_cosh.html#a0f6d989bcbbc38f15ef17a136879a9c9", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_cosh.html#aa6a2587485a0e015ac2d5211d7d045fc", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_cosh.html#a6928e827b9ac2e86e7d5b02b78150eee", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_cosh.html#a80fcb790649219c30260af903b76a1d7", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_cosh.html#a3ab82e9f0452faea735338abccb5f0ac", null ], + [ "print", "classmlx_1_1core_1_1_arc_cosh.html#a6a9a2ab0cc360d7e2f9676db17f8e630", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_cosh.html#a856c677f16e2b3f2edd2491e35db2d26", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_cosh.html#af8ff78e910a9e485a203e1d3347bd461", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sin-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_sin-members.html index e8dc0ce13..79c7e4746 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_sin-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sin-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcSin Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sin.html b/docs/build/html/classmlx_1_1core_1_1_arc_sin.html index 335eefc4c..f51314952 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_sin.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sin.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcSin Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcSin::output_shapes std::vector< Shape > mlx::core::ArcSin::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sin.js b/docs/build/html/classmlx_1_1core_1_1_arc_sin.js new file mode 100644 index 000000000..f9d64f38e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sin.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_sin = +[ + [ "ArcSin", "classmlx_1_1core_1_1_arc_sin.html#a97cb8c3d4d9d6abc627dec49a404f013", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_sin.html#ab3542492c14021329788de8f2a9be1e4", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_sin.html#a7fa4ae7a85bc8bed97ea258ae30762f3", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_sin.html#a13b5e39eeccaf32d94b8eb85b3b753ab", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_sin.html#a37affc8c5e84e5c54e73a71fc0821ea4", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_sin.html#a0217b9a4e18196ed65ba96b4ad096ecd", null ], + [ "print", "classmlx_1_1core_1_1_arc_sin.html#a895a35c9dd22fdb06e7b971bfd6fde87", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_sin.html#ab4057cd5ef1a8359f97493018e10d3a1", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_sin.html#a7cabb1e5a2bda44944378822c671ec82", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sinh-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_sinh-members.html index 42b97c8f1..be0a06f88 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_sinh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sinh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcSinh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sinh.html b/docs/build/html/classmlx_1_1core_1_1_arc_sinh.html index ad83db2b4..a172333df 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_sinh.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sinh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcSinh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcSinh::output_shapes std::vector< Shape > mlx::core::ArcSinh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_sinh.js b/docs/build/html/classmlx_1_1core_1_1_arc_sinh.js new file mode 100644 index 000000000..14d513a00 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_sinh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_sinh = +[ + [ "ArcSinh", "classmlx_1_1core_1_1_arc_sinh.html#a30076b222788deeaaf9ad92d3c535f20", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_sinh.html#a52574b24d8d16839c58673f51f8ac066", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_sinh.html#a79f648a86de4c10386a1ce3b5e38e8ac", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_sinh.html#a63c7a765c7906242dc3371deec094f0f", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_sinh.html#a79ebf2f6dfecbfbb93170fdd1ca87bf4", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_sinh.html#a2f668f230d93c7b90e62200a0b7cb6f6", null ], + [ "print", "classmlx_1_1core_1_1_arc_sinh.html#aa8b2934a8a0b2eedec8257bbb5726430", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_sinh.html#a7988ee5b9e1e7e498dcab73d61ba147e", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_sinh.html#a9e72b9751939387c333b5d4e19a37f6d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_tan-members.html index aa6b5150b..ad731c353 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tan-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcTan Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan.html b/docs/build/html/classmlx_1_1core_1_1_arc_tan.html index 11ffb3f01..8dab10307 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tan.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcTan Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcTan::output_shapes std::vector< Shape > mlx::core::ArcTan::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan.js b/docs/build/html/classmlx_1_1core_1_1_arc_tan.js new file mode 100644 index 000000000..5072513dc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_tan = +[ + [ "ArcTan", "classmlx_1_1core_1_1_arc_tan.html#a3511153bbd421e89fd9294cdb3f79b44", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_tan.html#a1211bc31241227528f04435239ddb9a3", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_tan.html#a77866feb27028865d844070447c9a254", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_tan.html#a0e5b5fc7218143ecd0a8666d9137c34c", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_tan.html#a0f5590a2297fc133b4b0a15f9dd0c760", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_tan.html#a2ebabfd1c2963199df0d7610b7ddf422", null ], + [ "print", "classmlx_1_1core_1_1_arc_tan.html#ab0309e4feca36f221b3d672dc92cac05", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_tan.html#a5fefc3634b96a67ff8ae011a8ee180c2", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_tan.html#a1fb921554544a56498bc54f82e4a0556", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan2-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_tan2-members.html index a6f32e13d..268814a1c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tan2-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan2-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcTan2 Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan2.html b/docs/build/html/classmlx_1_1core_1_1_arc_tan2.html index d02e0b6c4..479578424 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tan2.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan2.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcTan2 Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcTan2::output_shapes std::vector< Shape > mlx::core::ArcTan2::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tan2.js b/docs/build/html/classmlx_1_1core_1_1_arc_tan2.js new file mode 100644 index 000000000..a75a7993e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tan2.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_tan2 = +[ + [ "ArcTan2", "classmlx_1_1core_1_1_arc_tan2.html#aa1a4ebab9924b6bcc80df5b52ed0121a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_tan2.html#a13094e6b702769928ca0da468f5ce45c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_tan2.html#a76d3f0c29e0ff4642b8d39dac90d3f50", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_tan2.html#aeaee58cd803d3ebf0b76574a409682cc", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_tan2.html#a01675433f2a4fa466b2f48272dbca738", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_tan2.html#acb8e5cf85c4bc58f909ce2e8b83c3619", null ], + [ "print", "classmlx_1_1core_1_1_arc_tan2.html#abdfef9f572d06df1251c28222756a361", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_tan2.html#a99840c282e37b2b2a9c312e6e8ade1d2", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_tan2.html#ae02cb9fbf25e93dc1d7fbc9e3fb28634", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tanh-members.html b/docs/build/html/classmlx_1_1core_1_1_arc_tanh-members.html index cff6999ed..d564b9826 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tanh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tanh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArcTanh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tanh.html b/docs/build/html/classmlx_1_1core_1_1_arc_tanh.html index adc5253c2..8c65eae3d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arc_tanh.html +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tanh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArcTanh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArcTanh::output_shapes std::vector< Shape > mlx::core::ArcTanh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arc_tanh.js b/docs/build/html/classmlx_1_1core_1_1_arc_tanh.js new file mode 100644 index 000000000..07ba986b5 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arc_tanh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_arc_tanh = +[ + [ "ArcTanh", "classmlx_1_1core_1_1_arc_tanh.html#a17857bd0e2a3ecf1f7bf8e1a3d354358", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arc_tanh.html#a5af9224e1f1ffec412b0baa0af7e1ecd", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arc_tanh.html#a10566b9d3b2c7d090895b46d9040bc1d", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arc_tanh.html#ac8ecdd640043dab0461d49d7650679a2", null ], + [ "jvp", "classmlx_1_1core_1_1_arc_tanh.html#a534ebdbfe77241884630d25021274c4a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arc_tanh.html#a6806f04142d850f107a18a71900759c6", null ], + [ "print", "classmlx_1_1core_1_1_arc_tanh.html#aa9549311240d7ba225b84e1df9ad8523", null ], + [ "vjp", "classmlx_1_1core_1_1_arc_tanh.html#a07da5797f7aaf3dfe43bf24e8562ac72", null ], + [ "vmap", "classmlx_1_1core_1_1_arc_tanh.html#a6ddcae68873559211cb91e7740dfc040", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_partition-members.html b/docs/build/html/classmlx_1_1core_1_1_arg_partition-members.html index e708f7fc3..846724b13 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_partition-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_partition-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::ArgPartition Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::ArgPartitioninlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::ArgPartitionvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgPartitionvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::ArgPartitioninline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::ArgPartitionvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgPartitionvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_partition.html b/docs/build/html/classmlx_1_1core_1_1_arg_partition.html index 04b2e40d4..4b9274a78 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_partition.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_partition.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArgPartition Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +std::pair< int, int > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -200,7 +216,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -326,7 +342,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -347,7 +363,7 @@ Public Member Functions - + @@ -355,7 +371,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArgPartition::output_shapes std::vector< Shape > mlx::core::ArgPartition::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -385,7 +401,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -394,6 +410,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< int, int > mlx::core::ArgPartition::state () const
    +
    +inline
    +
    +
    @@ -428,7 +469,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -461,7 +502,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -477,10 +518,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_partition.js b/docs/build/html/classmlx_1_1core_1_1_arg_partition.js new file mode 100644 index 000000000..318817b7e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arg_partition.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_arg_partition = +[ + [ "ArgPartition", "classmlx_1_1core_1_1_arg_partition.html#ab54b13dbf92351ba1ac06fd3e5a802df", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arg_partition.html#a896f75c5325798ac3f9093f6a4581828", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arg_partition.html#a9a60995eaf85f63c877e86b23cbc15fc", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arg_partition.html#ad87509ce70b51fb75dfb9c3a05a5b31a", null ], + [ "jvp", "classmlx_1_1core_1_1_arg_partition.html#aedea4b47f947a6fe358dd1238cdfb595", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arg_partition.html#a587ce69b0639683ba646652f887d0239", null ], + [ "print", "classmlx_1_1core_1_1_arg_partition.html#aa8678d94fa1571ea71a7bf790cdb8d63", null ], + [ "state", "classmlx_1_1core_1_1_arg_partition.html#a5033c46f5aae9b14859cc8b0ca4c8e19", null ], + [ "vjp", "classmlx_1_1core_1_1_arg_partition.html#ade23d014717a0b0235d00073503aeac0", null ], + [ "vmap", "classmlx_1_1core_1_1_arg_partition.html#a441093795bcc31495ab5fbc9957b740a", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_reduce-members.html b/docs/build/html/classmlx_1_1core_1_1_arg_reduce-members.html index a86a23fbd..9d9290a7d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_reduce-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_reduce-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::ArgReduce Member List
    @@ -114,19 +128,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::ArgReduceinlinevirtual ReduceType enum namemlx::core::ArgReduce - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::ArgReducevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgReducevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::ArgReduceinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::ArgReducevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgReducevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_reduce.html b/docs/build/html/classmlx_1_1core_1_1_arg_reduce.html index d4115d622..9a7f5a741 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_reduce.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_reduce.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArgReduce Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Types | @@ -138,9 +152,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +std::pair< ReduceType, int > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -227,7 +243,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -257,7 +273,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -315,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -353,7 +369,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -374,7 +390,7 @@ Public Member Functions - + @@ -382,7 +398,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArgReduce::output_shapes std::vector< Shape > mlx::core::ArgReduce::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -412,7 +428,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -421,6 +437,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< ReduceType, int > mlx::core::ArgReduce::state () const
    +
    +inline
    +
    +
    @@ -455,7 +496,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -488,7 +529,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -504,10 +545,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_reduce.js b/docs/build/html/classmlx_1_1core_1_1_arg_reduce.js new file mode 100644 index 000000000..501487a0f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arg_reduce.js @@ -0,0 +1,17 @@ +var classmlx_1_1core_1_1_arg_reduce = +[ + [ "ReduceType", "classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3", [ + [ "ArgMin", "classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3a93a8a9221545ae9518d289d9ac4d09e9", null ], + [ "ArgMax", "classmlx_1_1core_1_1_arg_reduce.html#a920ed48caaba76683be0d1f1ed4a8bd3acc6659315ab0001abd37cbfcbe837e7e", null ] + ] ], + [ "ArgReduce", "classmlx_1_1core_1_1_arg_reduce.html#aaccf8021dc24895656e25142eb65aa03", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arg_reduce.html#ad8d48725623ede1ff654fa13eccf2287", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arg_reduce.html#aafa982ce2abc0cd9e81e43aa2c823d29", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arg_reduce.html#a03b81a670dcb1e39bf7279e4d4583b97", null ], + [ "jvp", "classmlx_1_1core_1_1_arg_reduce.html#a03bb925e1b488c560bc3d67ce62ba6fa", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arg_reduce.html#a81a70885480c1d436329025091b2fa4c", null ], + [ "print", "classmlx_1_1core_1_1_arg_reduce.html#a153a6d8dba7301c4fcd0e429154ead8f", null ], + [ "state", "classmlx_1_1core_1_1_arg_reduce.html#acac3b26364260aac7511b4cb7add3604", null ], + [ "vjp", "classmlx_1_1core_1_1_arg_reduce.html#a60d272685a373e6fe879416481a1ce1a", null ], + [ "vmap", "classmlx_1_1core_1_1_arg_reduce.html#abfec42fa06ea15edaf393593751fb1ba", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_sort-members.html b/docs/build/html/classmlx_1_1core_1_1_arg_sort-members.html index 2eec3e178..85d11398f 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_sort-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_sort-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ArgSort Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::ArgSortinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgSortvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::ArgSortinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ArgSortvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_sort.html b/docs/build/html/classmlx_1_1core_1_1_arg_sort.html index 66b002033..16a42c3f2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_arg_sort.html +++ b/docs/build/html/classmlx_1_1core_1_1_arg_sort.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ArgSort Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -121,12 +135,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +int state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -304,7 +320,7 @@ Public Member Functions - + @@ -312,7 +328,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ArgSort::output_shapes std::vector< Shape > mlx::core::ArgSort::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -351,6 +367,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    int mlx::core::ArgSort::state () const
    +
    +inline
    +
    +
    @@ -375,7 +416,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -391,10 +432,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_arg_sort.js b/docs/build/html/classmlx_1_1core_1_1_arg_sort.js new file mode 100644 index 000000000..0169fefc1 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_arg_sort.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_arg_sort = +[ + [ "ArgSort", "classmlx_1_1core_1_1_arg_sort.html#a38507a8445302a81cb44674c4a5fc0b0", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_arg_sort.html#a022079683774bfeb531b3a002cff16fa", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_arg_sort.html#abc2d730850ec4ee8d7968b7417911709", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_arg_sort.html#a048cd09c557d29d1111726f97010a845", null ], + [ "output_shapes", "classmlx_1_1core_1_1_arg_sort.html#a219ce04a811397a900c3235d8e6aef5c", null ], + [ "print", "classmlx_1_1core_1_1_arg_sort.html#a0b59ce43e0982d634a01631728b419bd", null ], + [ "state", "classmlx_1_1core_1_1_arg_sort.html#a90548429765f9e7e2332f01b72692fa2", null ], + [ "vmap", "classmlx_1_1core_1_1_arg_sort.html#a3522bbbe4626a467394c1a8a9d7ac34e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_as_strided-members.html b/docs/build/html/classmlx_1_1core_1_1_as_strided-members.html index 71ddfc428..b39a971ad 100644 --- a/docs/build/html/classmlx_1_1core_1_1_as_strided-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_as_strided-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::AsStrided Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::AsStridedinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AsStridedvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::AsStridedinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AsStridedvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_as_strided.html b/docs/build/html/classmlx_1_1core_1_1_as_strided.html index d8e0f8306..8556568ec 100644 --- a/docs/build/html/classmlx_1_1core_1_1_as_strided.html +++ b/docs/build/html/classmlx_1_1core_1_1_as_strided.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::AsStrided Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -109,7 +123,7 @@ Inheritance diagram for mlx::core::AsStrided:
    - + @@ -127,6 +141,8 @@ Public Member Functions + + @@ -158,7 +174,7 @@ Public Member Functions - + @@ -190,12 +206,12 @@ Public Member Functions - + - + @@ -205,7 +221,7 @@ Public Member Functions

    Public Member Functions

     AsStrided (Stream stream, Shape shape, Strides strides, size_t offset)
     AsStrided (Stream stream, Shape shape, Strides strides, size_t offset)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes)
     The primitive must know how to vectorize itself across the given axes.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
    Shape shape, Shape shape,
    Strides strides, Strides strides,
    -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -360,7 +376,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +385,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::AsStrided::state () const
    +
    +inline
    +
    +
    @@ -403,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -418,10 +459,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_as_strided.js b/docs/build/html/classmlx_1_1core_1_1_as_strided.js new file mode 100644 index 000000000..9c9986f73 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_as_strided.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_as_strided = +[ + [ "AsStrided", "classmlx_1_1core_1_1_as_strided.html#aee21aadc21343fd15aacb8f2f8ac3761", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_as_strided.html#acdd4705e4503ff0b124215c4676b4193", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_as_strided.html#ab6771a208323994927ca162ba7bb10ed", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_as_strided.html#a1738c6aa0a3a3eb68530f0d5b436e094", null ], + [ "jvp", "classmlx_1_1core_1_1_as_strided.html#a8ff0a398c47b42e08bc1122e07a02b53", null ], + [ "print", "classmlx_1_1core_1_1_as_strided.html#af2e21b77ea9e6c70bca45224967745bf", null ], + [ "state", "classmlx_1_1core_1_1_as_strided.html#ae730aeff375498ba774d4207c7af8c36", null ], + [ "vjp", "classmlx_1_1core_1_1_as_strided.html#a34783284c9b2f5b4a62c3c3ee5dd4062", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_as_type-members.html b/docs/build/html/classmlx_1_1core_1_1_as_type-members.html index 037024891..0c1da9cf7 100644 --- a/docs/build/html/classmlx_1_1core_1_1_as_type-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_as_type-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::AsType Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::AsTypeinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AsTypevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::AsTypevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::AsTypeinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::AsTypevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::AsTypevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_as_type.html b/docs/build/html/classmlx_1_1core_1_1_as_type.html index 43af8c5ac..7c458842b 100644 --- a/docs/build/html/classmlx_1_1core_1_1_as_type.html +++ b/docs/build/html/classmlx_1_1core_1_1_as_type.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::AsType Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +Dtype state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::AsType::output_shapes std::vector< Shape > mlx::core::AsType::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    Dtype mlx::core::AsType::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_as_type.js b/docs/build/html/classmlx_1_1core_1_1_as_type.js new file mode 100644 index 000000000..b6f022e70 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_as_type.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_as_type = +[ + [ "AsType", "classmlx_1_1core_1_1_as_type.html#a8c3241d402a8977bb4db037e225f5b47", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_as_type.html#aa89dbf4d73b00c6a44cffd04d5bb228d", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_as_type.html#a5b111b9d74c60d27b4a7ebaa49f96e0b", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_as_type.html#a8e6c8b2428ab15c4fb43f2e3a8fb38af", null ], + [ "jvp", "classmlx_1_1core_1_1_as_type.html#a213400967150c57da35795e1c9f65ca0", null ], + [ "output_shapes", "classmlx_1_1core_1_1_as_type.html#a3975b31cfd86d6eb33dc73554b357b88", null ], + [ "print", "classmlx_1_1core_1_1_as_type.html#aa617e29147c14bd5d1fa8ad0bf65af0c", null ], + [ "state", "classmlx_1_1core_1_1_as_type.html#a98ea769fc9cd6d76b07817444e7a78ab", null ], + [ "vjp", "classmlx_1_1core_1_1_as_type.html#ac38a4f889311a3b5e5be9a67dcb93e18", null ], + [ "vmap", "classmlx_1_1core_1_1_as_type.html#a7ebaf86fd6cad4a1ecfd7cde1ee0b0cc", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_bitwise_binary-members.html b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary-members.html index ff5e993be..7dbf2f05b 100644 --- a/docs/build/html/classmlx_1_1core_1_1_bitwise_binary-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::BitwiseBinary Member List
    @@ -116,20 +130,23 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::BitwiseBinaryvirtual RightShift enum valuemlx::core::BitwiseBinary - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::BitwiseBinaryvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::BitwiseBinaryvirtual - Xor enum valuemlx::core::BitwiseBinary - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::BitwiseBinaryinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::BitwiseBinaryvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::BitwiseBinaryvirtual + Xor enum valuemlx::core::BitwiseBinary + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.html b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.html index 829eb977b..67c82739e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.html +++ b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::BitwiseBinary Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Types | @@ -123,7 +137,7 @@ Public Types - + @@ -144,9 +158,11 @@ Public Member Functions - + + + @@ -231,7 +247,7 @@ Public Member Functions

    Public Member Functions

     BitwiseBinary (Stream stream, Op op)
     BitwiseBinary (Stream stream, Op op)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    -inlineexplicit +inlineexplicit
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -292,7 +308,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -319,7 +335,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -357,7 +373,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -378,7 +394,7 @@ Public Member Functions - + @@ -386,7 +402,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::BitwiseBinary::output_shapes std::vector< Shape > mlx::core::BitwiseBinary::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -416,7 +432,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -425,6 +441,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::BitwiseBinary::state () const
    +
    +inline
    +
    +
    @@ -459,7 +500,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -492,7 +533,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -508,10 +549,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.js b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.js new file mode 100644 index 000000000..2e5d62151 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_bitwise_binary.js @@ -0,0 +1,20 @@ +var classmlx_1_1core_1_1_bitwise_binary = +[ + [ "Op", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23d", [ + [ "And", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23dab14e7d426f45ae7f029f4e00210fbae4", null ], + [ "Or", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23da51065a44e7f9a76a6dab6de637c6db22", null ], + [ "Xor", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23dac95e7d8e6205449a70c8134e7dae3bd1", null ], + [ "LeftShift", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23da986b39e75cbe29fcda1d7bf7942a65a0", null ], + [ "RightShift", "classmlx_1_1core_1_1_bitwise_binary.html#a6f8b5d455d0c1770428a6bef1608f23da011e7b275a1f0edbd9345cfcf6501503", null ] + ] ], + [ "BitwiseBinary", "classmlx_1_1core_1_1_bitwise_binary.html#a0d8b3a94951621ffcdebc6fda748a172", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_bitwise_binary.html#a2194bf585213bda1b2966aa02d2fe283", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_bitwise_binary.html#ac831a29fc46701b00bbe63ee33832afd", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_bitwise_binary.html#a8cd6b916b4838a6c329cf4df8530c3b8", null ], + [ "jvp", "classmlx_1_1core_1_1_bitwise_binary.html#a1dae6ce5dc0498d20530403fe5c5531d", null ], + [ "output_shapes", "classmlx_1_1core_1_1_bitwise_binary.html#a49c9d2688d3cca8abf5698a250d57d56", null ], + [ "print", "classmlx_1_1core_1_1_bitwise_binary.html#a69b28e239da7fdb89f0a9f9467dd797d", null ], + [ "state", "classmlx_1_1core_1_1_bitwise_binary.html#a8a67d6f431b4055ab66656201622af4d", null ], + [ "vjp", "classmlx_1_1core_1_1_bitwise_binary.html#a6131ed1c317ff8700a3e9b13fdaa9d61", null ], + [ "vmap", "classmlx_1_1core_1_1_bitwise_binary.html#aa10be55f05bc1868bf4b375dc475f965", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m-members.html b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m-members.html index 3c4e236df..7ff10441f 100644 --- a/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::BlockMaskedMM Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::BlockMaskedMMinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::BlockMaskedMMvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::BlockMaskedMMinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::BlockMaskedMMvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.html b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.html index be2921ad0..030d61bda 100644 --- a/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.html +++ b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::BlockMaskedMM Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -124,6 +138,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes)  The primitive must know how to vectorize itself across the given axes.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -312,7 +328,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -321,6 +337,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::BlockMaskedMM::state () const
    +
    +inline
    +
    +
    @@ -355,7 +396,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -370,10 +411,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.js b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.js new file mode 100644 index 000000000..1cbc2c717 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_block_masked_m_m.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_block_masked_m_m = +[ + [ "BlockMaskedMM", "classmlx_1_1core_1_1_block_masked_m_m.html#ad26509deb5306d0c5eb72477e9a57477", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_block_masked_m_m.html#aa85da478cdc6d4a97be06e5d4abee1f2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_block_masked_m_m.html#ab372b6df4de00a33795a052a23bb1df9", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_block_masked_m_m.html#aef1c303955f9b8f445296372cf181160", null ], + [ "print", "classmlx_1_1core_1_1_block_masked_m_m.html#a37ecf6fa296d28efb7651a3c510fe159", null ], + [ "state", "classmlx_1_1core_1_1_block_masked_m_m.html#a6bbcc34b256840e4df2953563f2b4a07", null ], + [ "vjp", "classmlx_1_1core_1_1_block_masked_m_m.html#a1adf20087ee2f685bf39c2724b8e7120", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast-members.html b/docs/build/html/classmlx_1_1core_1_1_broadcast-members.html index 2abdd8ef9..0513bb3be 100644 --- a/docs/build/html/classmlx_1_1core_1_1_broadcast-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Broadcast Member List
    @@ -106,11 +120,13 @@ $(function(){ initResizable(false); }); operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive - output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual - Primitive(Stream stream)mlx::core::Primitiveinlineexplicit - Primitive(const Primitive &other)=deletemlx::core::Primitive - Primitive(Primitive &&other)=deletemlx::core::Primitive - print(std::ostream &os) overridemlx::core::Broadcastinlinevirtual + output_shape(const std::vector< array > &inputs)mlx::core::Broadcaststatic + output_shapes(const std::vector< array > &inputs) overridemlx::core::Broadcastvirtual + Primitive(Stream stream)mlx::core::Primitiveinlineexplicit + Primitive(const Primitive &other)=deletemlx::core::Primitive + Primitive(Primitive &&other)=deletemlx::core::Primitive + print(std::ostream &os) overridemlx::core::Broadcastinlinevirtual + state() constmlx::core::Broadcastinline stream()mlx::core::Primitiveinline UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive @@ -120,10 +136,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast.html b/docs/build/html/classmlx_1_1core_1_1_broadcast.html index 76dcf5224..196894a95 100644 --- a/docs/build/html/classmlx_1_1core_1_1_broadcast.html +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Broadcast Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -109,7 +124,7 @@ Inheritance diagram for mlx::core::Broadcast:
    - + @@ -127,9 +142,14 @@ Public Member Functions + + + + + @@ -158,9 +178,6 @@ Public Member Functions - - - @@ -171,6 +188,11 @@ Public Member Functions +

    Public Member Functions

     Broadcast (Stream stream, const Shape &shape)
     Broadcast (Stream stream, const Shape &shape)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< int > state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + +

    +Static Public Member Functions

    static Shape output_shape (const std::vector< array > &inputs)
     

    Constructor & Destructor Documentation

    @@ -190,12 +212,12 @@ Public Member Functions - const Shape & shape ) + const Shape & shape ) -inlineexplicit +inlineexplicit
    @@ -225,7 +247,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +278,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +305,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +343,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -330,6 +352,61 @@ Public Member Functions

    Reimplemented from mlx::core::Primitive.

    +
    + + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + +
    static Shape mlx::core::Broadcast::output_shape (const std::vector< array > & inputs)
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::Broadcast::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    +
    @@ -350,7 +427,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -359,6 +436,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    + + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< int > mlx::core::Broadcast::state () const
    +
    +inline
    +
    +
    @@ -393,7 +495,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -426,7 +528,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -442,10 +544,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast.js b/docs/build/html/classmlx_1_1core_1_1_broadcast.js new file mode 100644 index 000000000..6a1f27654 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_broadcast = +[ + [ "Broadcast", "classmlx_1_1core_1_1_broadcast.html#a004cce3029c0427569830016f99648cb", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_broadcast.html#a53d48d9778e2d4c24a124cd767900780", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_broadcast.html#ab9bd9dbcedcefc9b29c84911b5ce69fe", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_broadcast.html#a0e27692b0090ec451954649a36042616", null ], + [ "jvp", "classmlx_1_1core_1_1_broadcast.html#ae2fc3851a117079244708864be770ece", null ], + [ "output_shape", "classmlx_1_1core_1_1_broadcast.html#a00c39c113fe3e698771e2e6b595c32cd", null ], + [ "output_shapes", "classmlx_1_1core_1_1_broadcast.html#adef65b1ec75efbe43e5574ec81b7c0ac", null ], + [ "print", "classmlx_1_1core_1_1_broadcast.html#a6a610412861c6e472f930b6721b99a11", null ], + [ "state", "classmlx_1_1core_1_1_broadcast.html#a49fdb421047860733af7dfbbb478da8d", null ], + [ "vjp", "classmlx_1_1core_1_1_broadcast.html#a0318847c9be40f00b23907ad56037d18", null ], + [ "vmap", "classmlx_1_1core_1_1_broadcast.html#aee4c71c2588ad01eb57e10f346cd666f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast_axes-members.html b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes-members.html new file mode 100644 index 000000000..4218d0d9b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes-members.html @@ -0,0 +1,147 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::BroadcastAxes Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::BroadcastAxes, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    BroadcastAxes(Stream stream, std::vector< int > ignore_axes={})mlx::core::BroadcastAxesinlineexplicit
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::BroadcastAxesvirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::BroadcastAxesvirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::BroadcastAxesvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::BroadcastAxesvirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shape(const std::vector< array > &inputs, const std::vector< int > &ignore_axes)mlx::core::BroadcastAxesstatic
    output_shapes(const std::vector< array > &inputs) overridemlx::core::BroadcastAxesvirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::BroadcastAxesinlinevirtual
    state() constmlx::core::BroadcastAxesinline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::BroadcastAxesvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::BroadcastAxesvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.html b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.html new file mode 100644 index 000000000..375465e68 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.html @@ -0,0 +1,560 @@ + + + + + + + +MLX: mlx::core::BroadcastAxes Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::BroadcastAxes Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::BroadcastAxes:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     BroadcastAxes (Stream stream, std::vector< int > ignore_axes={})
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + + +

    +Static Public Member Functions

    static Shape output_shape (const std::vector< array > &inputs, const std::vector< int > &ignore_axes)
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ BroadcastAxes()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    mlx::core::BroadcastAxes::BroadcastAxes (Stream stream,
    std::vector< int > ignore_axes = {} )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::BroadcastAxes::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::BroadcastAxes::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::BroadcastAxes::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::BroadcastAxes::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static Shape mlx::core::BroadcastAxes::output_shape (const std::vector< array > & inputs,
    const std::vector< int > & ignore_axes )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::BroadcastAxes::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::BroadcastAxes::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::BroadcastAxes::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::BroadcastAxes::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::BroadcastAxes::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.js b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.js new file mode 100644 index 000000000..4e1e6fb89 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_broadcast_axes = +[ + [ "BroadcastAxes", "classmlx_1_1core_1_1_broadcast_axes.html#a5136f33489670cdc0802e46725288195", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_broadcast_axes.html#a6423095cd28b2f90893c03166257a568", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_broadcast_axes.html#a56d16e75a0df867d2f1ba4e5198f15cb", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_broadcast_axes.html#a44d14b22b995e643cb04cc43654d7b16", null ], + [ "jvp", "classmlx_1_1core_1_1_broadcast_axes.html#a830bae1f3f9078bd5b422ce6e46685a7", null ], + [ "output_shape", "classmlx_1_1core_1_1_broadcast_axes.html#aaa495110c16fbbc642fbb224ef8dfae6", null ], + [ "output_shapes", "classmlx_1_1core_1_1_broadcast_axes.html#a42c4385e65851d58e4411a4afe73f58e", null ], + [ "print", "classmlx_1_1core_1_1_broadcast_axes.html#aa15f81d08cabe43ac92de7534fb940df", null ], + [ "state", "classmlx_1_1core_1_1_broadcast_axes.html#a5b2594b7a70dd4873a07e742140a245f", null ], + [ "vjp", "classmlx_1_1core_1_1_broadcast_axes.html#aea8ef2b2616568a2bb56695381a035be", null ], + [ "vmap", "classmlx_1_1core_1_1_broadcast_axes.html#a4e04f564d440e2d312c335db52c308e1", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.png b/docs/build/html/classmlx_1_1core_1_1_broadcast_axes.png new file mode 100644 index 0000000000000000000000000000000000000000..1422e9a8d2360634e61bfd39a71bb6e4b89219a1 GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0vp^Gl95+gBeI3=GeInNJ$6ygt-3y{~ySF@#br3|Doj; z2ATyD)6cwk@ZbSZ-1KbN5}+JsNswPK1CS2}=1jA%FfcG%db&7S$>}xiH&c2QuO88njo-l+a&525@myZ()g^59>DNTk=c%swvm$(A%F#1# zW_ETqul8FnFME4wT3cla+oU%$ulcBFWjU#RyYhU^*T15hA1>T)a{Ijd)-Dz8yjd^j z?OG98e=2^~#3!oX&#dChI3Kxv_WH9W(hZY<}UNo6#;i#!ot5!jeqMq>5uE7 z9+lh{NzYpx#*?-@yruJejx7^|{9{H2y~6Bo6&0by+1olSLqBJW?d4<$JH*3~(;~@m zgTt6%gJ2p%g7O)L18y@I8+r|x8Ke{07|f6rd<;K>9tLb_oht7)xA|XR^8CKWZ=-v9 zlX89vZuUI#_0VM<*?+Gc*50)Lv14swIW)7vK5K0@Emiux zI&O{p%J1)lAMbc|^Mh|yZn&}RwJR+?Z!)vWM5E6|{&u~ea834QmHU>^--4ZQ)+awN zy|;1ZyBXcHc+W-ZM(`~?_+}OJsnF5`4|+G>{WELkyGhb%sp+rhX+JLBck|WeXTH<< z&#bcQsh+H2-}mwUvH8F6zvSKc-n82N&HrEWb5&#o(o`}JZ;d=>SZmTB$$u9HHxT=qR%;t?!7QN{MFWp-NDQsbMIht4%!?faW| z&-`-xzRgxjyQaTg?brXw_t*6VbJw6+-)u9h^yc2nyB9|XiLbAGm}9;gl8%BmpR}|- z6Eb_BP5LTM_PvqEj_>|G^Xs-sQ^~TM$!^ylZZdaui4lZ*WJYJlje^{1L0)n{*{>(f V>1LRf*AC2C44$rjF6*2UngBSk#F792 literal 0 HcmV?d00001 diff --git a/docs/build/html/classmlx_1_1core_1_1_ceil-members.html b/docs/build/html/classmlx_1_1core_1_1_ceil-members.html index 1081c0aa0..6234eb871 100644 --- a/docs/build/html/classmlx_1_1core_1_1_ceil-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_ceil-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Ceil Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_ceil.html b/docs/build/html/classmlx_1_1core_1_1_ceil.html index 8b5cfdb35..5b01693be 100644 --- a/docs/build/html/classmlx_1_1core_1_1_ceil.html +++ b/docs/build/html/classmlx_1_1core_1_1_ceil.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Ceil Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Ceil::output_shapes std::vector< Shape > mlx::core::Ceil::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_ceil.js b/docs/build/html/classmlx_1_1core_1_1_ceil.js new file mode 100644 index 000000000..d98dada4e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_ceil.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_ceil = +[ + [ "Ceil", "classmlx_1_1core_1_1_ceil.html#aede38610ca25429f229301546bc9b682", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_ceil.html#a9791801fff3f8b79944e15ac2a45a035", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_ceil.html#abe178e0058e44b6618be414215e96887", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_ceil.html#aacd90acb56eb0649c1cef807aa21df52", null ], + [ "jvp", "classmlx_1_1core_1_1_ceil.html#a7ad74b27d9f26c886c2af516b845f066", null ], + [ "output_shapes", "classmlx_1_1core_1_1_ceil.html#a3bf7db5178ed26e23d9ba360ba34ab85", null ], + [ "print", "classmlx_1_1core_1_1_ceil.html#a14a0048dd6496341cacaddada68276ee", null ], + [ "vjp", "classmlx_1_1core_1_1_ceil.html#ac2f5a2bd84b8f013e5ce688419a88acb", null ], + [ "vmap", "classmlx_1_1core_1_1_ceil.html#ae86819990b43bdb0c2b3a25719b3a7a4", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_cholesky-members.html b/docs/build/html/classmlx_1_1core_1_1_cholesky-members.html index 21d347f76..24d149c46 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cholesky-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_cholesky-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Cholesky Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Choleskyinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Choleskyvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Choleskyinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Choleskyvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cholesky.html b/docs/build/html/classmlx_1_1core_1_1_cholesky.html index aa973813e..e2802e432 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cholesky.html +++ b/docs/build/html/classmlx_1_1core_1_1_cholesky.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Cholesky Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -115,6 +129,8 @@ Public Member Functions   void eval_gpu (const std::vector< array > &inputs, array &out) override   +auto state () const +  virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override  The primitive must know how to vectorize itself across the given axes.
      @@ -158,7 +174,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -292,6 +308,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Cholesky::state () const
    +
    +inline
    +
    +
    @@ -316,7 +357,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -332,10 +373,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cholesky.js b/docs/build/html/classmlx_1_1core_1_1_cholesky.js new file mode 100644 index 000000000..f22f48c91 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_cholesky.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1_cholesky = +[ + [ "Cholesky", "classmlx_1_1core_1_1_cholesky.html#a6ae2e30b85f99f4f0d7f14c7949818ab", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_cholesky.html#a4bdec36c1cc99aadf9a4a39d4c57bea5", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_cholesky.html#a8c918594bf129888044ef37fcae56795", null ], + [ "print", "classmlx_1_1core_1_1_cholesky.html#a0a8b51ff7f5369d22bdc58910d4aaf84", null ], + [ "state", "classmlx_1_1core_1_1_cholesky.html#a64f03d32ed249a3b2a59b6af66d23727", null ], + [ "vmap", "classmlx_1_1core_1_1_cholesky.html#ab5c3f6199ec3b399c91243a05d116aa5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_compiled-members.html b/docs/build/html/classmlx_1_1core_1_1_compiled-members.html index 4e1d6330e..ecd75c2af 100644 --- a/docs/build/html/classmlx_1_1core_1_1_compiled-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_compiled-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Compiled Member List
    @@ -113,10 +127,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Compiledvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_compiled.html b/docs/build/html/classmlx_1_1core_1_1_compiled.html index 36ee259c0..c9621b73a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_compiled.html +++ b/docs/build/html/classmlx_1_1core_1_1_compiled.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Compiled Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -124,7 +138,7 @@ Public Member Functions std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override  The vector-Jacobian product.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      void print (std::ostream &os) override @@ -193,7 +207,7 @@ Public Member Functions -explicit +explicit
    @@ -223,7 +237,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -257,7 +271,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -284,7 +298,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -322,7 +336,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -351,7 +365,7 @@ Public Member Functions -inline +inline
    @@ -368,7 +382,7 @@ Public Member Functions - + @@ -376,7 +390,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Compiled::output_shapes std::vector< Shape > mlx::core::Compiled::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -406,7 +420,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -449,7 +463,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -482,7 +496,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -498,10 +512,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_compiled.js b/docs/build/html/classmlx_1_1core_1_1_compiled.js new file mode 100644 index 000000000..8e56e2998 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_compiled.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_compiled = +[ + [ "Compiled", "classmlx_1_1core_1_1_compiled.html#a2d8cefff835c419a48a077d306b8e051", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_compiled.html#ac45b1d0fedd85feefbff7ce7e168b151", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_compiled.html#aa3d5ff0f2b3554ad48fbbf2a0f3336d5", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_compiled.html#a63e5016458887813b4a59dee5a0a3f10", null ], + [ "jvp", "classmlx_1_1core_1_1_compiled.html#aa385fe28626856ca5f57161b47a3c205", null ], + [ "lib_name", "classmlx_1_1core_1_1_compiled.html#ae5c16cb91ac31b97e7652cc526c07439", null ], + [ "output_shapes", "classmlx_1_1core_1_1_compiled.html#a15cb081590ee024ba11476494581a4d4", null ], + [ "print", "classmlx_1_1core_1_1_compiled.html#a271521f92eef49c39799f38e26b64a9b", null ], + [ "vjp", "classmlx_1_1core_1_1_compiled.html#a32462e65c52f84b708188130cc508133", null ], + [ "vmap", "classmlx_1_1core_1_1_compiled.html#a732e7548f53977b4513bb7f30a04c30d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_concatenate-members.html b/docs/build/html/classmlx_1_1core_1_1_concatenate-members.html index 3a7e68413..c1e47c024 100644 --- a/docs/build/html/classmlx_1_1core_1_1_concatenate-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_concatenate-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Concatenate Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Concatenateinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Concatenatevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Concatenatevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Concatenateinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Concatenatevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Concatenatevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_concatenate.html b/docs/build/html/classmlx_1_1core_1_1_concatenate.html index c919179f3..371882376 100644 --- a/docs/build/html/classmlx_1_1core_1_1_concatenate.html +++ b/docs/build/html/classmlx_1_1core_1_1_concatenate.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Concatenate Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,9 +144,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Concatenate::output_shapes std::vector< Shape > mlx::core::Concatenate::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Concatenate::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_concatenate.js b/docs/build/html/classmlx_1_1core_1_1_concatenate.js new file mode 100644 index 000000000..858fd72fc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_concatenate.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_concatenate = +[ + [ "Concatenate", "classmlx_1_1core_1_1_concatenate.html#acff07853de2d31faeec7c4ca40ce0888", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_concatenate.html#a609e76bede7fc5581ec84ddcb727a258", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_concatenate.html#a309a1c50e97f9925866433ee2841c474", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_concatenate.html#aaf8a72a0c30114460caf519580cc35d2", null ], + [ "jvp", "classmlx_1_1core_1_1_concatenate.html#a9f9e7a9dc3a00e02b84c94e1868baff1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_concatenate.html#af8415a2fe28804a1437d0876ba15615f", null ], + [ "print", "classmlx_1_1core_1_1_concatenate.html#a56f29b585a6d1d958954a68dcc893f33", null ], + [ "state", "classmlx_1_1core_1_1_concatenate.html#a60cd572a42b346399ee539af2dfbf29e", null ], + [ "vjp", "classmlx_1_1core_1_1_concatenate.html#a8155db9100ec3b8bd0bc94baeaeee3b0", null ], + [ "vmap", "classmlx_1_1core_1_1_concatenate.html#a58c54dcf8e4b045d25edd3afc2caffc1", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_conjugate-members.html b/docs/build/html/classmlx_1_1core_1_1_conjugate-members.html index f7924d36f..760eac07d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_conjugate-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_conjugate-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Conjugate Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_conjugate.html b/docs/build/html/classmlx_1_1core_1_1_conjugate.html index 2546f35eb..d4297c436 100644 --- a/docs/build/html/classmlx_1_1core_1_1_conjugate.html +++ b/docs/build/html/classmlx_1_1core_1_1_conjugate.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Conjugate Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -124,7 +138,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -300,7 +314,7 @@ Public Member Functions - + @@ -308,7 +322,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Conjugate::output_shapes std::vector< Shape > mlx::core::Conjugate::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -371,7 +385,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -387,10 +401,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_conjugate.js b/docs/build/html/classmlx_1_1core_1_1_conjugate.js new file mode 100644 index 000000000..f0088ffc6 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_conjugate.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_conjugate = +[ + [ "Conjugate", "classmlx_1_1core_1_1_conjugate.html#a627f9e6a8729fb3ffb3ca3228d007c87", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_conjugate.html#ae39643e2178f442ffba05139f8609d61", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_conjugate.html#aff0a802166e3724db88ab5d3feb2d3de", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_conjugate.html#af42f00a790c6bc5572bd8fe9e5b36c5e", null ], + [ "output_shapes", "classmlx_1_1core_1_1_conjugate.html#afd68332463d12e69c47388f6b81ae96c", null ], + [ "print", "classmlx_1_1core_1_1_conjugate.html#a40281539bbd543ac8fd8e28650de17e4", null ], + [ "vmap", "classmlx_1_1core_1_1_conjugate.html#a2c7632c8ae0ca07777e23a0a79344e60", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_contiguous-members.html b/docs/build/html/classmlx_1_1core_1_1_contiguous-members.html index 060223ede..fcf5f6420 100644 --- a/docs/build/html/classmlx_1_1core_1_1_contiguous-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_contiguous-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Contiguous Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_contiguous.html b/docs/build/html/classmlx_1_1core_1_1_contiguous.html index cbbab66f1..9dd36f7e9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_contiguous.html +++ b/docs/build/html/classmlx_1_1core_1_1_contiguous.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Contiguous Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override @@ -195,7 +209,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +239,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +270,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +297,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +335,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +356,7 @@ Public Member Functions - + @@ -350,7 +364,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Contiguous::output_shapes std::vector< Shape > mlx::core::Contiguous::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +394,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -423,7 +437,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +470,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +486,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_contiguous.js b/docs/build/html/classmlx_1_1core_1_1_contiguous.js new file mode 100644 index 000000000..276afb19d --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_contiguous.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_contiguous = +[ + [ "Contiguous", "classmlx_1_1core_1_1_contiguous.html#a3e83f414c02ae0b92a50b6f8e402e1c0", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_contiguous.html#a742de24e6c0310cd85a606dec0cd8336", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_contiguous.html#a519cd16fd0c55b371ea7625fbb37c70f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_contiguous.html#aa5d273a461fc6e64f3c9a67c24cb3372", null ], + [ "jvp", "classmlx_1_1core_1_1_contiguous.html#a1f9fcae7235e0ae9217825b78cb0f991", null ], + [ "output_shapes", "classmlx_1_1core_1_1_contiguous.html#afff58fbf61f0c26b3606208dd2fa2072", null ], + [ "print", "classmlx_1_1core_1_1_contiguous.html#aca8a4ba9a58cc10f063e6b082fa2fc23", null ], + [ "vjp", "classmlx_1_1core_1_1_contiguous.html#abf488f02057fd5852f38b2e8a600ad2a", null ], + [ "vmap", "classmlx_1_1core_1_1_contiguous.html#a563221e90b15aa90bfae23d29c10e4ec", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_convolution-members.html b/docs/build/html/classmlx_1_1core_1_1_convolution-members.html index 9d7d28745..33d566255 100644 --- a/docs/build/html/classmlx_1_1core_1_1_convolution-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_convolution-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Convolution Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Convolutioninlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Convolutionvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Convolutioninline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Convolutionvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_convolution.html b/docs/build/html/classmlx_1_1core_1_1_convolution.html index 72fd0bdfd..a0a98e874 100644 --- a/docs/build/html/classmlx_1_1core_1_1_convolution.html +++ b/docs/build/html/classmlx_1_1core_1_1_convolution.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Convolution Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -124,6 +138,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes)  The primitive must know how to vectorize itself across the given axes.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -220,7 +236,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -250,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -281,7 +297,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -308,7 +324,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -337,7 +353,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -346,6 +362,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Convolution::state () const
    +
    +inline
    +
    +
    @@ -380,7 +421,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -395,10 +436,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_convolution.js b/docs/build/html/classmlx_1_1core_1_1_convolution.js new file mode 100644 index 000000000..3017d2311 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_convolution.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_convolution = +[ + [ "Convolution", "classmlx_1_1core_1_1_convolution.html#a6f1de77b719bb13217b0d8c64cabb8ef", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_convolution.html#ac74256068da01730629109fa4fa8432b", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_convolution.html#a30b64109eeb1778f002b99447dff9dd2", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_convolution.html#afb87708a5e3aab2e9e663daa9d8863de", null ], + [ "print", "classmlx_1_1core_1_1_convolution.html#a844eab7c4cc99e775cfb561265ed14fd", null ], + [ "state", "classmlx_1_1core_1_1_convolution.html#a7f44f0caea20cc2858717afba1e915d8", null ], + [ "vjp", "classmlx_1_1core_1_1_convolution.html#af8eb9c0c055ad20aa74b547016917690", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_copy-members.html b/docs/build/html/classmlx_1_1core_1_1_copy-members.html index f497b5bb8..25a1985e1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_copy-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_copy-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Copy Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_copy.html b/docs/build/html/classmlx_1_1core_1_1_copy.html index 2ae401c26..01b681b00 100644 --- a/docs/build/html/classmlx_1_1core_1_1_copy.html +++ b/docs/build/html/classmlx_1_1core_1_1_copy.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Copy Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Copy::output_shapes std::vector< Shape > mlx::core::Copy::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_copy.js b/docs/build/html/classmlx_1_1core_1_1_copy.js new file mode 100644 index 000000000..23716d8c3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_copy.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_copy = +[ + [ "Copy", "classmlx_1_1core_1_1_copy.html#a6243e044af119105ffaaed7d405cd584", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_copy.html#af4a0ebec423e84ffe8083a5e9ed0d70c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_copy.html#a1eda7b2ea771a168f67421f0d384b3a1", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_copy.html#afcfa39465015f638e294aa954ea0f3da", null ], + [ "jvp", "classmlx_1_1core_1_1_copy.html#a5acf02aa360cbefd86749fe9877b29cc", null ], + [ "output_shapes", "classmlx_1_1core_1_1_copy.html#a6bbe5fd9ce3cb5a39853b316106d2674", null ], + [ "print", "classmlx_1_1core_1_1_copy.html#acfa1a02ab9cdab593e928faa515a8008", null ], + [ "vjp", "classmlx_1_1core_1_1_copy.html#a6c4dee582001e9983e9517485ee37efd", null ], + [ "vmap", "classmlx_1_1core_1_1_copy.html#a669b10253c15b769d90058d1ad7d0e61", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_cos-members.html b/docs/build/html/classmlx_1_1core_1_1_cos-members.html index b6cee517e..93f03e79d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cos-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_cos-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Cos Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cos.html b/docs/build/html/classmlx_1_1core_1_1_cos.html index f19e939c4..51d1ccf60 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cos.html +++ b/docs/build/html/classmlx_1_1core_1_1_cos.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Cos Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Cos::output_shapes std::vector< Shape > mlx::core::Cos::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cos.js b/docs/build/html/classmlx_1_1core_1_1_cos.js new file mode 100644 index 000000000..390f43986 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_cos.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_cos = +[ + [ "Cos", "classmlx_1_1core_1_1_cos.html#a2acb9fcf0901462189c476756fd99995", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_cos.html#a061fc446268fe56237ae6b20ccf78152", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_cos.html#a5ef41aafad595f6cdd8c535e36e12060", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_cos.html#ab611ca38c987915659f7ffcce0370417", null ], + [ "jvp", "classmlx_1_1core_1_1_cos.html#a99dd0b7e4aa2c838b77736f1fd539ee1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_cos.html#a923312e71c5a003a38b37ab67ec82580", null ], + [ "print", "classmlx_1_1core_1_1_cos.html#a81858457e4bea931a4bc6f6e38b0f696", null ], + [ "vjp", "classmlx_1_1core_1_1_cos.html#a51d84113728e651ef9d4a1fe671c4d00", null ], + [ "vmap", "classmlx_1_1core_1_1_cos.html#aec9460daf0131156734013d03b230cd6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_cosh-members.html b/docs/build/html/classmlx_1_1core_1_1_cosh-members.html index 42a8079a2..4810ce88e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cosh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_cosh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Cosh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cosh.html b/docs/build/html/classmlx_1_1core_1_1_cosh.html index a7f2caccb..ab3646586 100644 --- a/docs/build/html/classmlx_1_1core_1_1_cosh.html +++ b/docs/build/html/classmlx_1_1core_1_1_cosh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Cosh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Cosh::output_shapes std::vector< Shape > mlx::core::Cosh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_cosh.js b/docs/build/html/classmlx_1_1core_1_1_cosh.js new file mode 100644 index 000000000..948c08bd6 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_cosh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_cosh = +[ + [ "Cosh", "classmlx_1_1core_1_1_cosh.html#a44e8ac2e09a55ec32e9dc6641eedc8f1", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_cosh.html#ae8702df7e8f0e20cbeccb2a548961d3d", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_cosh.html#a23f71b43792934c3ec0ebe9b74f32559", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_cosh.html#ae0bacccaf501f5349db0c13cca776ff9", null ], + [ "jvp", "classmlx_1_1core_1_1_cosh.html#a79facb0882443533f36a0a18407f5863", null ], + [ "output_shapes", "classmlx_1_1core_1_1_cosh.html#adf58c7e24b5059e66007132bc16dfe49", null ], + [ "print", "classmlx_1_1core_1_1_cosh.html#ac247faad68c1050cda9f72d7d6d040e2", null ], + [ "vjp", "classmlx_1_1core_1_1_cosh.html#a0791abd4305a333fb3b181a5357ce0f4", null ], + [ "vmap", "classmlx_1_1core_1_1_cosh.html#a1ab2386e7d96219b6e4a525f7dac0406", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_custom_transforms-members.html b/docs/build/html/classmlx_1_1core_1_1_custom_transforms-members.html index 219d833d5..cbd83ea21 100644 --- a/docs/build/html/classmlx_1_1core_1_1_custom_transforms-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_custom_transforms-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::CustomTransforms Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::CustomTransformsvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_custom_transforms.html b/docs/build/html/classmlx_1_1core_1_1_custom_transforms.html index 34b499238..5d4242862 100644 --- a/docs/build/html/classmlx_1_1core_1_1_custom_transforms.html +++ b/docs/build/html/classmlx_1_1core_1_1_custom_transforms.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::CustomTransforms Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -139,7 +153,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -255,7 +269,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -291,7 +305,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -320,7 +334,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -363,7 +377,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -396,7 +410,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -412,10 +426,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_custom_transforms.js b/docs/build/html/classmlx_1_1core_1_1_custom_transforms.js new file mode 100644 index 000000000..a2abee1aa --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_custom_transforms.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_custom_transforms = +[ + [ "CustomTransforms", "classmlx_1_1core_1_1_custom_transforms.html#ab52abadb9c6f6db83d087c7b751be488", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_custom_transforms.html#adba1c40c77a2138df6b5f75483f62184", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_custom_transforms.html#a7b3538681acbb20af3ed37b0877f6667", null ], + [ "jvp", "classmlx_1_1core_1_1_custom_transforms.html#aa9f695100170d5cae999b3da138ce720", null ], + [ "print", "classmlx_1_1core_1_1_custom_transforms.html#a2ddbacbc468271b11caee0ad97005298", null ], + [ "vjp", "classmlx_1_1core_1_1_custom_transforms.html#aa1da36cef632df767cd9809d6cf06209", null ], + [ "vmap", "classmlx_1_1core_1_1_custom_transforms.html#a906a2ff30d9c5281fbf1fa927e4c021b", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_depends-members.html b/docs/build/html/classmlx_1_1core_1_1_depends-members.html index 0759ea3c4..43f4d57a4 100644 --- a/docs/build/html/classmlx_1_1core_1_1_depends-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_depends-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Depends Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_depends.html b/docs/build/html/classmlx_1_1core_1_1_depends.html index d509451cd..cd50567c1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_depends.html +++ b/docs/build/html/classmlx_1_1core_1_1_depends.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Depends Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -139,7 +153,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -172,7 +186,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -202,7 +216,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -263,7 +277,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -306,7 +320,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,10 +335,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_depends.js b/docs/build/html/classmlx_1_1core_1_1_depends.js new file mode 100644 index 000000000..15f59a9dc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_depends.js @@ -0,0 +1,8 @@ +var classmlx_1_1core_1_1_depends = +[ + [ "Depends", "classmlx_1_1core_1_1_depends.html#a4ccb792c99f5d8d133d3fac29f7d3f62", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_depends.html#a0c7ea6db97337591fa53c6e6bde41e5e", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_depends.html#ae5057f65e69490ad0add8eeda2b75e28", null ], + [ "print", "classmlx_1_1core_1_1_depends.html#aed575b0d927f4341f60442c70adeeb82", null ], + [ "vjp", "classmlx_1_1core_1_1_depends.html#a02996fa45f01f7cb9f37074d5f8ccab0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_div_mod-members.html b/docs/build/html/classmlx_1_1core_1_1_div_mod-members.html index f1df14e3d..a3b13562a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_div_mod-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_div_mod-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::DivMod Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::DivModvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_div_mod.html b/docs/build/html/classmlx_1_1core_1_1_div_mod.html index d92944b0b..06cf7d20d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_div_mod.html +++ b/docs/build/html/classmlx_1_1core_1_1_div_mod.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::DivMod Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::Primitive @@ -172,7 +186,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -202,7 +216,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -263,7 +277,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -301,7 +315,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -322,7 +336,7 @@ Public Member Functions - + @@ -330,7 +344,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::DivMod::output_shapes std::vector< Shape > mlx::core::DivMod::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -360,7 +374,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -403,7 +417,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +450,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +466,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_div_mod.js b/docs/build/html/classmlx_1_1core_1_1_div_mod.js new file mode 100644 index 000000000..cba30ca28 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_div_mod.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_div_mod = +[ + [ "DivMod", "classmlx_1_1core_1_1_div_mod.html#a859e3b6149cdceab1c7ccfd2246fb826", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_div_mod.html#ae350b7b93ad128e3133ee14f247193b3", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_div_mod.html#a003117c9ecf3c06a27248f72a76348dc", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_div_mod.html#af5fcf8ec8515d46844cbeeab6dafb38a", null ], + [ "jvp", "classmlx_1_1core_1_1_div_mod.html#a1267401f25f25847888dd0a00b3fe3b9", null ], + [ "output_shapes", "classmlx_1_1core_1_1_div_mod.html#a1b7f104346cb5423ac15371b45c7ef86", null ], + [ "print", "classmlx_1_1core_1_1_div_mod.html#a7edbed50d07869d921e529157931b7a1", null ], + [ "vjp", "classmlx_1_1core_1_1_div_mod.html#a8c914a07f666a1d9377a27ed5d55e7c1", null ], + [ "vmap", "classmlx_1_1core_1_1_div_mod.html#ae709e0fdd83994bd1d156e0d0e6a7942", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_divide-members.html b/docs/build/html/classmlx_1_1core_1_1_divide-members.html index 214a0cd11..584016e17 100644 --- a/docs/build/html/classmlx_1_1core_1_1_divide-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_divide-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Divide Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_divide.html b/docs/build/html/classmlx_1_1core_1_1_divide.html index b7ee8ee63..73ab555f1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_divide.html +++ b/docs/build/html/classmlx_1_1core_1_1_divide.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Divide Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Divide::output_shapes std::vector< Shape > mlx::core::Divide::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_divide.js b/docs/build/html/classmlx_1_1core_1_1_divide.js new file mode 100644 index 000000000..c38e24617 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_divide.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_divide = +[ + [ "Divide", "classmlx_1_1core_1_1_divide.html#a62fc71e8998be65ff18285dbbd21eedb", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_divide.html#a823443c2a8e8b81bbcaeee6ddbcdbf49", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_divide.html#abffda0ce37221ddc28dc9eea794f6bc7", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_divide.html#a3dda091f05c4164c29bb8129e9712650", null ], + [ "jvp", "classmlx_1_1core_1_1_divide.html#ae1f408c447b17b3c84fe7f951d95559c", null ], + [ "output_shapes", "classmlx_1_1core_1_1_divide.html#a9563d9ee243204cfdaac6aca34853cd7", null ], + [ "print", "classmlx_1_1core_1_1_divide.html#af3c15337ac15522cc34ed98b97895bb6", null ], + [ "vjp", "classmlx_1_1core_1_1_divide.html#ad3af7c70cad22c1a1a75b4a78ef793b6", null ], + [ "vmap", "classmlx_1_1core_1_1_divide.html#a83e7da52831165b3a026e97b63770242", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice-members.html b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice-members.html new file mode 100644 index 000000000..6525daea1 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice-members.html @@ -0,0 +1,146 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::DynamicSlice Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::DynamicSlice, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    device()mlx::core::Primitiveinline
    DynamicSlice(Stream stream, std::vector< int > axes, Shape slice_size)mlx::core::DynamicSliceinlineexplicit
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::DynamicSlicevirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::DynamicSlicevirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::DynamicSlicevirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::DynamicSlicevirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs) overridemlx::core::DynamicSlicevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::DynamicSliceinlinevirtual
    state() constmlx::core::DynamicSliceinline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::DynamicSlicevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::DynamicSlicevirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_uniform.html b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.html similarity index 58% rename from docs/build/html/classmlx_1_1core_1_1_uniform.html rename to docs/build/html/classmlx_1_1core_1_1_dynamic_slice.html index b0616df08..e1374b7e6 100644 --- a/docs/build/html/classmlx_1_1core_1_1_uniform.html +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.html @@ -3,19 +3,26 @@ - + -MLX: mlx::core::Uniform Class Reference +MLX: mlx::core::DynamicSlice Class Reference + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    -
    mlx::core::Uniform Class Reference
    +List of all members
    +
    mlx::core::DynamicSlice Class Reference

    #include <primitives.h>

    -Inheritance diagram for mlx::core::Uniform:
    +Inheritance diagram for mlx::core::DynamicSlice:
    - - + + mlx::core::UnaryPrimitive mlx::core::Primitive @@ -109,21 +123,32 @@ Inheritance diagram for mlx::core::Uniform:
    - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -152,15 +177,6 @@ Public Member Functions - - - - - - - - - @@ -173,8 +189,8 @@ Public Member Functions

    Public Member Functions

     Uniform (Stream stream)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
     DynamicSlice (Stream stream, std::vector< int > axes, Shape slice_size)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums)
     The Jacobian-vector product.
     
    virtual std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)
     The vector-Jacobian product.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     

    Constructor & Destructor Documentation

    - -

    ◆ Uniform()

    + +

    ◆ DynamicSlice()

    @@ -183,15 +199,24 @@ Public Member Functions - + - + + + + + + + + + +
    mlx::core::Uniform::Uniform mlx::core::DynamicSlice::DynamicSlice (Stream stream)Stream stream,
    std::vector< int > axes,
    Shape slice_size )
    -inlineexplicit +inlineexplicit
    @@ -199,8 +224,8 @@ Public Member Functions

    Member Function Documentation

    - -

    ◆ eval_cpu()

    + +

    ◆ eval_cpu()

    @@ -209,7 +234,7 @@ Public Member Functions - + @@ -221,7 +246,7 @@ Public Member Functions
    void mlx::core::Uniform::eval_cpu void mlx::core::DynamicSlice::eval_cpu ( const std::vector< array > & inputs,
    -overridevirtual +overridevirtual
    @@ -230,8 +255,8 @@ Public Member Functions
    - -

    ◆ eval_gpu()

    + +

    ◆ eval_gpu()

    @@ -240,7 +265,7 @@ Public Member Functions - + @@ -252,7 +277,7 @@ Public Member Functions
    void mlx::core::Uniform::eval_gpu void mlx::core::DynamicSlice::eval_gpu ( const std::vector< array > & inputs,
    -overridevirtual +overridevirtual
    @@ -261,8 +286,8 @@ Public Member Functions
    - -

    ◆ is_equivalent()

    + +

    ◆ is_equivalent()

    @@ -271,7 +296,7 @@ Public Member Functions - + @@ -279,7 +304,7 @@ Public Member Functions
    bool mlx::core::Uniform::is_equivalent bool mlx::core::DynamicSlice::is_equivalent ( const Primitive & other) const
    -inlineoverridevirtual +overridevirtual
    @@ -290,8 +315,8 @@ Public Member Functions
    - -

    ◆ print()

    + +

    ◆ jvp()

    @@ -300,7 +325,75 @@ Public Member Functions - + + + + + + + + + + + + + + +
    void mlx::core::Uniform::print std::vector< array > mlx::core::DynamicSlice::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    + + +overridevirtual + + +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::DynamicSlice::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + +inlineoverridevirtual
    + + + @@ -308,7 +401,7 @@ Public Member Functions
    void mlx::core::DynamicSlice::print ( std::ostream & os)
    -inlineoverridevirtual
    @@ -319,8 +412,8 @@ Public Member Functions
    - -

    ◆ vmap()

    + +

    ◆ state()

    @@ -329,7 +422,75 @@ Public Member Functions - + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::Uniform::vmap auto mlx::core::DynamicSlice::state () const
    + + +inline + + +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::DynamicSlice::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + +overridevirtual
    + + + @@ -341,7 +502,7 @@ Public Member Functions
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::DynamicSlice::vmap ( const std::vector< array > & inputs,
    -overridevirtual
    @@ -357,10 +518,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.js b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.js new file mode 100644 index 000000000..b83819d9b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_dynamic_slice = +[ + [ "DynamicSlice", "classmlx_1_1core_1_1_dynamic_slice.html#a97f23f7d45b69219dee1a208d9a3063b", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_dynamic_slice.html#a4e8c22c24a587ea0648ce89f461ed1ee", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_dynamic_slice.html#ab0a2e31c03f02a4f25700e240cf18e3e", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_dynamic_slice.html#a0325271def8d9ea9ed21eb27e51994b4", null ], + [ "jvp", "classmlx_1_1core_1_1_dynamic_slice.html#acd0d2d6d83d4112e9e6fdd9ca8072ac3", null ], + [ "output_shapes", "classmlx_1_1core_1_1_dynamic_slice.html#a920dc4d1ee4976065e6d91fe3ecfbbf3", null ], + [ "print", "classmlx_1_1core_1_1_dynamic_slice.html#a421283744fe5554ac9a8288cf47edeab", null ], + [ "state", "classmlx_1_1core_1_1_dynamic_slice.html#aec9084e603d7562f3a75c5fc32918581", null ], + [ "vjp", "classmlx_1_1core_1_1_dynamic_slice.html#a29caf03256945f7732a52d551191f8fa", null ], + [ "vmap", "classmlx_1_1core_1_1_dynamic_slice.html#a825a6d4d1499b287525462854b841ef2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.png b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1542717d553a7920261981547b8e70f4eca4d2 GIT binary patch literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^(}1{xgBeH~F+Z{fQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GW1o-U3d6^w7^KFoV^OC?@kf3xjsdU2iI%;20#we7#!`;{`^vb>(z zcBt>?owDq`s-Kt4KAxs0opq|{rJ2@`+$VcXvR`&Y>EsHb zZk5GeI+J>`V%7wCN%}DqOqXLYn0M?*l}+0dDdFrzQWLWS*35BX=+NHCps?x)Q^N`& zZiYo(It(3Jcm;kjM=YIUG%vuT$OPyfx2X{-l2_%tJ&e}f{A=PiZ+_gj%)dsHzWm}_ zBiz6EK$oia&pif=rvtCAznN=YTRKl}OWpdM=v}Gj_hlBXtG}^F`r4fE6MKJp>`sl_ zW%J_q&b{wu=d4*j?Q7;LN3QQ#t4g0lSFg4`cQ<0U+&A&WiMNC~c5eTAX#1X69cy{^ ztFOLHTfVyY2V2l2Pd%x%18zK9{o01D#L-nutN5tlzpDlfF)!j2C?59N+8h5Hx z?!Na&{)exNAt+-Yo&JN?wZ1v zeNKH<_2-pu!)&+Q{F-Q&?VD(PBYkdGi;XbJM)h2(!V-4qFnC7_dg-4SN+={mdKI;Vst0Qiis2mk;8 literal 0 HcmV?d00001 diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update-members.html b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update-members.html new file mode 100644 index 000000000..4f5f59728 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update-members.html @@ -0,0 +1,146 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::DynamicSliceUpdate Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::DynamicSliceUpdate, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    device()mlx::core::Primitiveinline
    DynamicSliceUpdate(Stream stream, std::vector< int > axes)mlx::core::DynamicSliceUpdateinlineexplicit
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::DynamicSliceUpdatevirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::DynamicSliceUpdatevirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::DynamicSliceUpdatevirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::DynamicSliceUpdatevirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs) overridemlx::core::DynamicSliceUpdateinlinevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::DynamicSliceUpdateinlinevirtual
    state() constmlx::core::DynamicSliceUpdateinline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::DynamicSliceUpdatevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::DynamicSliceUpdatevirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.html b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.html new file mode 100644 index 000000000..1d9ac26a1 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.html @@ -0,0 +1,525 @@ + + + + + + + +MLX: mlx::core::DynamicSliceUpdate Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::DynamicSliceUpdate Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::DynamicSliceUpdate:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     DynamicSliceUpdate (Stream stream, std::vector< int > axes)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ DynamicSliceUpdate()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    mlx::core::DynamicSliceUpdate::DynamicSliceUpdate (Stream stream,
    std::vector< int > axes )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::DynamicSliceUpdate::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::DynamicSliceUpdate::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::DynamicSliceUpdate::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::DynamicSliceUpdate::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::DynamicSliceUpdate::output_shapes (const std::vector< array > & inputs)
    +
    +inlineoverridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::DynamicSliceUpdate::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::DynamicSliceUpdate::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::DynamicSliceUpdate::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::DynamicSliceUpdate::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.js b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.js new file mode 100644 index 000000000..5a256a20c --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_dynamic_slice_update = +[ + [ "DynamicSliceUpdate", "classmlx_1_1core_1_1_dynamic_slice_update.html#a16bbd8d756598cf620e3b3c95dd23213", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_dynamic_slice_update.html#a379185914db0326a5d4839839fe4fc83", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_dynamic_slice_update.html#a249dab28690c45203c3995698de0cab7", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_dynamic_slice_update.html#ae6292d2b1f3221a7c8ef6b77cb466481", null ], + [ "jvp", "classmlx_1_1core_1_1_dynamic_slice_update.html#ad1eae28869ebc2ecad87a9a01e314d56", null ], + [ "output_shapes", "classmlx_1_1core_1_1_dynamic_slice_update.html#a804c03c745fc563e209a7bfb3d425a91", null ], + [ "print", "classmlx_1_1core_1_1_dynamic_slice_update.html#a3669f4d939ba36256c43143b603eb12b", null ], + [ "state", "classmlx_1_1core_1_1_dynamic_slice_update.html#a0b0b2a0e4d97305fd6f3c635fcdccd76", null ], + [ "vjp", "classmlx_1_1core_1_1_dynamic_slice_update.html#ab2817cb9d1bfcd3de6454d841909da1f", null ], + [ "vmap", "classmlx_1_1core_1_1_dynamic_slice_update.html#a750fb3548d8f3a5c6f4e54958649936f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.png b/docs/build/html/classmlx_1_1core_1_1_dynamic_slice_update.png new file mode 100644 index 0000000000000000000000000000000000000000..4f318b6e38472217eed79fbbe2dc7b6baf562517 GIT binary patch literal 1015 zcmeAS@N?(olHy`uVBq!ia0vp^JAk-@gBeIBPrn!eq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NtFJY5_^Dj46+y*O!!0*|Zy z^i}Kr{1;!JtF6|s&C0KA#VL{Wt%fbhEZ;;epW7&%P_dL#^qVxV#lo|y$lYe*lgdlK z*PEB^`foC6PgnbogEMAdyME+y)cl`rzPm(9_MSr@)mwg25UWO>1 z-0$2md5JpAp+=i3&ROzvF#M6yXONf}cr<>!<5_pn`FoC=$cNeZi86dpJ;HckvH&}S zzmp7u4QC<42NgmBD^6NI7j#rR`H`b=(ifE@o|h&IKk8IDZ`>~5=lOnr+_#tiE_;09 z{_pxn;nA0r-;XkDfB$q_8gpuE+_Md9n^Y^R0*=>i%6&P_&i1lMOx=w=Dy7x}^V9uO zZs+9PUAko&`(KO8*XMfntDc;-xa+k}sO!li(^fsI-k92ZUH^^#y*FmRcWy2D+t-4qOUy=mie*PZw0 zg}=`Dopkl*6+!dVU8SogJb4`R$G%ae{DWxyx!d7?9P{5Vb((Zu;E~EpPf!p}rhdqI zYAzLY6cUu|7Z4ZxsB*;B#U}Hp{=O4?4!gSa1uC9y=uEqFC$V~aeCYrFqwD)3*}ojS zBj}&K>8D$(E^DlQ@r+d;pRenwWnWP-we+8<*eVj-Chqv z*2|`Co+e`DT)NS7*3WC=;iA|1XY)^SS(3K=QI(I-#kDmqi#IL3aymo(djFBHb#JDu zXX#YAT@t1pcj)*0%ClR~-VwdN8JOf^AD@1fv9I>=4bgn_y!VUFFYDWJbI#Y(< - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Eigh Member List
    @@ -107,15 +121,18 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Eighinlinevirtual - stream()mlx::core::Primitiveinline - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Eighvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual + state() constmlx::core::Eighinline + stream()mlx::core::Primitiveinline + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Eighvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_eigh.html b/docs/build/html/classmlx_1_1core_1_1_eigh.html index 2bd389b74..131662c14 100644 --- a/docs/build/html/classmlx_1_1core_1_1_eigh.html +++ b/docs/build/html/classmlx_1_1core_1_1_eigh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Eigh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -121,12 +135,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::Primitive  Primitive (Stream stream)   @@ -181,7 +197,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -211,7 +227,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -245,7 +261,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -272,7 +288,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions - + @@ -301,7 +317,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Eigh::output_shapes std::vector< Shape > mlx::core::Eigh::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -340,6 +356,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Eigh::state () const
    +
    +inline
    +
    +
    @@ -364,7 +405,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -380,10 +421,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_eigh.js b/docs/build/html/classmlx_1_1core_1_1_eigh.js new file mode 100644 index 000000000..fae2594dc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_eigh.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_eigh = +[ + [ "Eigh", "classmlx_1_1core_1_1_eigh.html#ad8f5d012ebd5942abeffecca77fcddda", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_eigh.html#a894b32e17229394f6a43b4a0655fd8be", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_eigh.html#a67775b41c0a15e356f08d51d9736baa2", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_eigh.html#a09414e3fe88a952408d164d6dd0af381", null ], + [ "output_shapes", "classmlx_1_1core_1_1_eigh.html#a9892f5b72dec19a5a2f7af5efcf2a952", null ], + [ "print", "classmlx_1_1core_1_1_eigh.html#a2b8e47ecd60cd7330716761c5fb1fe84", null ], + [ "state", "classmlx_1_1core_1_1_eigh.html#aa3b6c33b5679c5528863f3de2ab2f914", null ], + [ "vmap", "classmlx_1_1core_1_1_eigh.html#ab2f2ea5326e2f6045f9b7250692c240f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_equal-members.html b/docs/build/html/classmlx_1_1core_1_1_equal-members.html index 16ccc7c09..863199ffb 100644 --- a/docs/build/html/classmlx_1_1core_1_1_equal-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_equal-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Equal Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Equalinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Equalvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Equalvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Equalinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Equalvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Equalvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_equal.html b/docs/build/html/classmlx_1_1core_1_1_equal.html index ab1164fc0..122895440 100644 --- a/docs/build/html/classmlx_1_1core_1_1_equal.html +++ b/docs/build/html/classmlx_1_1core_1_1_equal.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Equal Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      void print (std::ostream &os) override  Print the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Equal::output_shapes std::vector< Shape > mlx::core::Equal::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Equal::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_equal.js b/docs/build/html/classmlx_1_1core_1_1_equal.js new file mode 100644 index 000000000..c6c8cb2bf --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_equal.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_equal = +[ + [ "Equal", "classmlx_1_1core_1_1_equal.html#a4af81cf2dd071db5bbf8ce1df95fdf36", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_equal.html#aabb8aa61fa581defddcdca1274b1b454", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_equal.html#ac3757001fec42ceb5ece2954df42161c", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_equal.html#a58c1c5003e43f47dc0788c1851deaa02", null ], + [ "jvp", "classmlx_1_1core_1_1_equal.html#a659d484589d7cd96d038922a1a98730f", null ], + [ "output_shapes", "classmlx_1_1core_1_1_equal.html#ae714c2b0641fc9c339a2f8483bb4e257", null ], + [ "print", "classmlx_1_1core_1_1_equal.html#a0787bf32f0b405a8b2ac809d2d990774", null ], + [ "state", "classmlx_1_1core_1_1_equal.html#aa27ff7525f109edc56b731a6df78f6bc", null ], + [ "vjp", "classmlx_1_1core_1_1_equal.html#af3c1bfcd1bf50922fc00e302bb193736", null ], + [ "vmap", "classmlx_1_1core_1_1_equal.html#aea9cc3c88924ac824d72c39c2e83b0ca", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_erf-members.html b/docs/build/html/classmlx_1_1core_1_1_erf-members.html index 2913b6186..a541c789e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_erf-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_erf-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Erf Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_erf.html b/docs/build/html/classmlx_1_1core_1_1_erf.html index 95b797e6b..ed46fe2af 100644 --- a/docs/build/html/classmlx_1_1core_1_1_erf.html +++ b/docs/build/html/classmlx_1_1core_1_1_erf.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Erf Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Erf::output_shapes std::vector< Shape > mlx::core::Erf::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_erf.js b/docs/build/html/classmlx_1_1core_1_1_erf.js new file mode 100644 index 000000000..af7a90012 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_erf.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_erf = +[ + [ "Erf", "classmlx_1_1core_1_1_erf.html#a702f76f848928d8d7d3d0881ac6e4c82", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_erf.html#a84ea16e43d5b7f83bbc2d5ece78a3fb6", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_erf.html#ad8551be664d767dccc3c0d8cc1eca008", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_erf.html#abe99dfbc2954c3a7d5dec56ab165ee82", null ], + [ "jvp", "classmlx_1_1core_1_1_erf.html#ac733d605d80277d613954794eb8c46fe", null ], + [ "output_shapes", "classmlx_1_1core_1_1_erf.html#ace70b96c48419e29243982ed697f6411", null ], + [ "print", "classmlx_1_1core_1_1_erf.html#a186af7b783cf832c3b25eec3a09f5a0c", null ], + [ "vjp", "classmlx_1_1core_1_1_erf.html#a1f529e95a42a2d69a8b18979d3ee2909", null ], + [ "vmap", "classmlx_1_1core_1_1_erf.html#abe554f553356654a3e800ba368108aaa", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_erf_inv-members.html b/docs/build/html/classmlx_1_1core_1_1_erf_inv-members.html index 96fa3aa9b..c279a86c9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_erf_inv-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_erf_inv-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::ErfInv Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_erf_inv.html b/docs/build/html/classmlx_1_1core_1_1_erf_inv.html index dca528218..fdb676126 100644 --- a/docs/build/html/classmlx_1_1core_1_1_erf_inv.html +++ b/docs/build/html/classmlx_1_1core_1_1_erf_inv.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::ErfInv Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::ErfInv::output_shapes std::vector< Shape > mlx::core::ErfInv::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_erf_inv.js b/docs/build/html/classmlx_1_1core_1_1_erf_inv.js new file mode 100644 index 000000000..0a9fcee8f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_erf_inv.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_erf_inv = +[ + [ "ErfInv", "classmlx_1_1core_1_1_erf_inv.html#a5d0279247b67da4592311559f04e1478", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_erf_inv.html#af579627402af3249565134884701d39e", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_erf_inv.html#a4a2413d0634db1f3dae1806ddfa632db", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_erf_inv.html#aaac9e3b454ba564f9c6e804ab6562832", null ], + [ "jvp", "classmlx_1_1core_1_1_erf_inv.html#aa52710297ab6f7cd6826418c303e64be", null ], + [ "output_shapes", "classmlx_1_1core_1_1_erf_inv.html#a067cac7a7244b4dae6629c7e4466589f", null ], + [ "print", "classmlx_1_1core_1_1_erf_inv.html#a0acb31bd5780abf61877bd1a3e0fd4f9", null ], + [ "vjp", "classmlx_1_1core_1_1_erf_inv.html#a48afff12a58ddefae7ae0245c3580189", null ], + [ "vmap", "classmlx_1_1core_1_1_erf_inv.html#ad5d7634e8568af8cc4a54a558a48d0e9", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_event-members.html b/docs/build/html/classmlx_1_1core_1_1_event-members.html index d0675248f..e01d1983c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_event-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_event-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Event Member List
    @@ -105,10 +119,12 @@ $(function(){ initResizable(false); }); value() constmlx::core::Eventinline wait()mlx::core::Event
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_event.html b/docs/build/html/classmlx_1_1core_1_1_event.html index d687f0bda..a543800fb 100644 --- a/docs/build/html/classmlx_1_1core_1_1_event.html +++ b/docs/build/html/classmlx_1_1core_1_1_event.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Event Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -139,7 +153,7 @@ Public Member Functions -default +default
    @@ -199,7 +213,7 @@ Public Member Functions -inline +inline
    @@ -224,7 +238,7 @@ Public Member Functions -inline +inline
    @@ -266,7 +280,7 @@ Public Member Functions -inline +inline
    @@ -291,7 +305,7 @@ Public Member Functions -inline +inline
    @@ -316,7 +330,7 @@ Public Member Functions -inline +inline
    @@ -344,10 +358,13 @@ Public Member Functions
  • mlx/event.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_event.js b/docs/build/html/classmlx_1_1core_1_1_event.js new file mode 100644 index 000000000..924cdc8ad --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_event.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_event = +[ + [ "Event", "classmlx_1_1core_1_1_event.html#a833506419b2110ad1abd89b2dd238b4d", null ], + [ "Event", "classmlx_1_1core_1_1_event.html#a13e4835f2ffb2cc22e29148a448ea184", null ], + [ "is_signaled", "classmlx_1_1core_1_1_event.html#a05a9a3de88185b4a89e154242b4e770a", null ], + [ "raw_event", "classmlx_1_1core_1_1_event.html#af408d30df17c4771e9e2aa550cb6e921", null ], + [ "set_value", "classmlx_1_1core_1_1_event.html#a0d077b11f4b28f882b42440b7ac6d40d", null ], + [ "signal", "classmlx_1_1core_1_1_event.html#a65a858445506a61be5889ae0e3651b89", null ], + [ "stream", "classmlx_1_1core_1_1_event.html#a193143bad31b68c699fa27f135b45614", null ], + [ "valid", "classmlx_1_1core_1_1_event.html#aa77afd9669e2ef9d5e9ae1c2c6fd24fa", null ], + [ "value", "classmlx_1_1core_1_1_event.html#ab71c7baee3d1d02ad6a2001bbf90b970", null ], + [ "wait", "classmlx_1_1core_1_1_event.html#a634afd918e6ed847f354531ba9f48252", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_exp-members.html b/docs/build/html/classmlx_1_1core_1_1_exp-members.html index de08e5ea1..97b3e540c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_exp-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_exp-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Exp Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_exp.html b/docs/build/html/classmlx_1_1core_1_1_exp.html index a9ea24023..bbba5b8ee 100644 --- a/docs/build/html/classmlx_1_1core_1_1_exp.html +++ b/docs/build/html/classmlx_1_1core_1_1_exp.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Exp Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Exp::output_shapes std::vector< Shape > mlx::core::Exp::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_exp.js b/docs/build/html/classmlx_1_1core_1_1_exp.js new file mode 100644 index 000000000..fedc55116 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_exp.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_exp = +[ + [ "Exp", "classmlx_1_1core_1_1_exp.html#a1d0a618cbb91ab29ef53b57ff6ed6e06", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_exp.html#a47934c5a5023bc7ae7ae89bff45ebb2c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_exp.html#a7d63695a97a14760fd33b5d4e6590822", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_exp.html#ac6e44bffe7a643ab4ca51e74c7328357", null ], + [ "jvp", "classmlx_1_1core_1_1_exp.html#aef6721832fcc283b082e35a7d436fa59", null ], + [ "output_shapes", "classmlx_1_1core_1_1_exp.html#aef2b3c24dba3ca3a63a210d3bd8e39b6", null ], + [ "print", "classmlx_1_1core_1_1_exp.html#ad87cc1b2ae595a613b03b0fdca63ae6a", null ], + [ "vjp", "classmlx_1_1core_1_1_exp.html#a94b9b7d137c3640d290b96c5e8b7e1a8", null ], + [ "vmap", "classmlx_1_1core_1_1_exp.html#a0fcd579fe148b4c3dbc72e514b81bb37", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_expand_dims-members.html b/docs/build/html/classmlx_1_1core_1_1_expand_dims-members.html new file mode 100644 index 000000000..facebc4ec --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_expand_dims-members.html @@ -0,0 +1,147 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::ExpandDims Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::ExpandDims, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::ExpandDimsvirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::ExpandDimsvirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    ExpandDims(Stream stream, std::vector< int > axes)mlx::core::ExpandDimsinlineexplicit
    is_equivalent(const Primitive &other) const overridemlx::core::ExpandDimsvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::ExpandDimsvirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shape(const array &input, const std::vector< int > &axes)mlx::core::ExpandDimsstatic
    output_shapes(const std::vector< array > &inputs) overridemlx::core::ExpandDimsvirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::ExpandDimsinlinevirtual
    state() constmlx::core::ExpandDimsinline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::ExpandDimsvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::ExpandDimsvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_expand_dims.html b/docs/build/html/classmlx_1_1core_1_1_expand_dims.html new file mode 100644 index 000000000..9f9aa284a --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_expand_dims.html @@ -0,0 +1,560 @@ + + + + + + + +MLX: mlx::core::ExpandDims Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::ExpandDims Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::ExpandDims:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     ExpandDims (Stream stream, std::vector< int > axes)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + + +

    +Static Public Member Functions

    static Shape output_shape (const array &input, const std::vector< int > &axes)
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ ExpandDims()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    mlx::core::ExpandDims::ExpandDims (Stream stream,
    std::vector< int > axes )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::ExpandDims::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::ExpandDims::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::ExpandDims::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::ExpandDims::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static Shape mlx::core::ExpandDims::output_shape (const array & input,
    const std::vector< int > & axes )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::ExpandDims::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::ExpandDims::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::ExpandDims::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::ExpandDims::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::ExpandDims::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_expand_dims.js b/docs/build/html/classmlx_1_1core_1_1_expand_dims.js new file mode 100644 index 000000000..c878cb6db --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_expand_dims.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_expand_dims = +[ + [ "ExpandDims", "classmlx_1_1core_1_1_expand_dims.html#aea2479ea4dd93941eb83a22e087983a8", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_expand_dims.html#a34058a87582a6ab2e5d82a75bc713030", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_expand_dims.html#ad350ede3abecc55371ddeb89fbba2b90", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_expand_dims.html#aef468da4027527afec7b24161ce1e1f3", null ], + [ "jvp", "classmlx_1_1core_1_1_expand_dims.html#a2ccfe836a715dd8fa908731523f3ce5f", null ], + [ "output_shape", "classmlx_1_1core_1_1_expand_dims.html#a3814ad4697eccb75fdb9275017a3fd67", null ], + [ "output_shapes", "classmlx_1_1core_1_1_expand_dims.html#af64bd4bc2cc5f5c58869f34cd974bb3c", null ], + [ "print", "classmlx_1_1core_1_1_expand_dims.html#ac8f1d849562b2222158fbe476fc2dc2e", null ], + [ "state", "classmlx_1_1core_1_1_expand_dims.html#a7cacc704c533c00ba072f0a7872631cf", null ], + [ "vjp", "classmlx_1_1core_1_1_expand_dims.html#a2fb3c65ba7a3b2d1f33a3c681fda8896", null ], + [ "vmap", "classmlx_1_1core_1_1_expand_dims.html#a380c9ddc25a1f973c3d71b42f8a19486", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_expand_dims.png b/docs/build/html/classmlx_1_1core_1_1_expand_dims.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4a8f433af8bfc158134e544f3b6682eb577a29 GIT binary patch literal 918 zcmeAS@N?(olHy`uVBq!ia0vp^(}1{xgBeH~F+Z{fQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GVQo-U3d6^w7^KFoWqz~ja* zAN2Hl{iEB^IxM;E*%JyE~= z&#id<_3w(F{y*5(PPTj(ay%+C_I6R=(i)NEzY&MF{mMDGUERA&_q^$vn#^?1RmVH8 z>Gn=yTYNV5epLC&Dx)*O=@XXB+njYZa#xmzXZ5XnuTtydvTrEU7Pl0R*1HrQp5ZUOdo`z7~-6`4|r!V zR&eSv=r3e_pt^-&Pm5T?bcE#T`UO*q&wX~Bw&W%U(C{5yilDLC=70b z!$8-5VX07|$;OPOS8H~zP_vn~t4=5J_ABoXUmfMk&u?2=eP{Lk5?;OdS9@k(n`G|! z`{KDZ`Jwu?HWJ58zqjSDdcN)Is$_65?8=foI_=)8>7O&##`15M4%Ggt?QyAYjr6{! zvRPN3KVA^kd@t**m-4;^ra3>2W=)gd^DamD{^eEuM~&BRTKJYz`}*zAdF|V?%G0YB zTop+y5K?{lc+U^}5AAg|_qP2CTl;8 zH1krn-`dqzd*UW%9ra}SAWTH)fP(HP|CS)HOgoRXw9SH1X=!mzr_Y=@J@H!irtgoF z)5=bnE@GMIR_}HC%o|H{-SCR#Q?JcD?P^*d`)Jpt-@B^Ue%jD?Z=dMe<44ODuP<4@ z^@&H?@4#A}$ZgS2Q=dj#XLi5ZdTaaK(AD20!WJ)oyVkw-mE_w=x3YNW?pqdWUitKT z>y9n+@)kvA9naiarfYwzsDE0$@a$>ttFyOv=AM?nG4Vrd0k_hnlW=`< - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Expm1 Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_expm1.html b/docs/build/html/classmlx_1_1core_1_1_expm1.html index 1512dbe27..d94720d62 100644 --- a/docs/build/html/classmlx_1_1core_1_1_expm1.html +++ b/docs/build/html/classmlx_1_1core_1_1_expm1.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Expm1 Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +302,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -309,7 +323,7 @@ Public Member Functions - + @@ -317,7 +331,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Expm1::output_shapes std::vector< Shape > mlx::core::Expm1::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -347,7 +361,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -390,7 +404,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -423,7 +437,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -439,10 +453,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_expm1.js b/docs/build/html/classmlx_1_1core_1_1_expm1.js new file mode 100644 index 000000000..754d9ee99 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_expm1.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_expm1 = +[ + [ "Expm1", "classmlx_1_1core_1_1_expm1.html#a47c2a1b2a4ef6bb07ba77c55ddddaec2", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_expm1.html#ab9c8b7aa50fe4592d55f8957baac647a", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_expm1.html#a82930071f4b77d883b300f77966aff5f", null ], + [ "jvp", "classmlx_1_1core_1_1_expm1.html#ad463730632a00945d3a8addfdaec67b1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_expm1.html#ae78f03a204687f16164ed702cfc0d5cc", null ], + [ "print", "classmlx_1_1core_1_1_expm1.html#af1a99266fc50aa5948cdd298e2916ef1", null ], + [ "vjp", "classmlx_1_1core_1_1_expm1.html#af6ce416169190479c9792bb9cdbe2f43", null ], + [ "vmap", "classmlx_1_1core_1_1_expm1.html#aa4caa848b2ea97e71ee3dd33de039296", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_f_f_t-members.html b/docs/build/html/classmlx_1_1core_1_1_f_f_t-members.html index 15d37e8d7..96db05fdd 100644 --- a/docs/build/html/classmlx_1_1core_1_1_f_f_t-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_f_f_t-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::FFT Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::FFTinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::FFTvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::FFTvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::FFTinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::FFTvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::FFTvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_f_f_t.html b/docs/build/html/classmlx_1_1core_1_1_f_f_t.html index 2e9f2db09..016a2db59 100644 --- a/docs/build/html/classmlx_1_1core_1_1_f_f_t.html +++ b/docs/build/html/classmlx_1_1core_1_1_f_f_t.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::FFT Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,6 +144,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions const Streamstream ()  The stream the primitive will run on.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -205,7 +221,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -360,7 +376,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +385,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::FFT::state () const
    +
    +inline
    +
    +
    @@ -403,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +477,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +493,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_f_f_t.js b/docs/build/html/classmlx_1_1core_1_1_f_f_t.js new file mode 100644 index 000000000..558938d9a --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_f_f_t.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_f_f_t = +[ + [ "FFT", "classmlx_1_1core_1_1_f_f_t.html#a0cdce626ed2c8eeeecc6949418437839", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_f_f_t.html#a6bc262a0c2b5d4fe655e3e2e0ff28635", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_f_f_t.html#a1c21b26d1e9ad7c4da78ae845721b2dd", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_f_f_t.html#a0ede3bc8b6d77d560c0a750b68fddc06", null ], + [ "jvp", "classmlx_1_1core_1_1_f_f_t.html#a34578814b6576f7b7b447541984ecba6", null ], + [ "print", "classmlx_1_1core_1_1_f_f_t.html#a15a2a5f7647f5fb78611a251d3270edf", null ], + [ "state", "classmlx_1_1core_1_1_f_f_t.html#a710c6f6e8412da0af0fdbe58fbae320e", null ], + [ "vjp", "classmlx_1_1core_1_1_f_f_t.html#aafc895614a6e368c0e6d64af20d01090", null ], + [ "vmap", "classmlx_1_1core_1_1_f_f_t.html#ac32d6cc9b67289124f855ea68a61ede1", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_flatten-members.html b/docs/build/html/classmlx_1_1core_1_1_flatten-members.html new file mode 100644 index 000000000..98993e7ec --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_flatten-members.html @@ -0,0 +1,147 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::Flatten Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::Flatten, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::Flattenvirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::Flattenvirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    Flatten(Stream stream, int start_axis, int end_axis)mlx::core::Flatteninlineexplicit
    is_equivalent(const Primitive &other) const overridemlx::core::Flattenvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::Flattenvirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shape(const array &input, int start_axis, int end_axis)mlx::core::Flattenstatic
    output_shapes(const std::vector< array > &inputs) overridemlx::core::Flattenvirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::Flatteninlinevirtual
    state() constmlx::core::Flatteninline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Flattenvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Flattenvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_flatten.html b/docs/build/html/classmlx_1_1core_1_1_flatten.html new file mode 100644 index 000000000..4aba4b787 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_flatten.html @@ -0,0 +1,570 @@ + + + + + + + +MLX: mlx::core::Flatten Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::Flatten Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::Flatten:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Flatten (Stream stream, int start_axis, int end_axis)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + + +

    +Static Public Member Functions

    static Shape output_shape (const array &input, int start_axis, int end_axis)
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ Flatten()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    mlx::core::Flatten::Flatten (Stream stream,
    int start_axis,
    int end_axis )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Flatten::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Flatten::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::Flatten::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Flatten::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    static Shape mlx::core::Flatten::output_shape (const array & input,
    int start_axis,
    int end_axis )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::Flatten::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::Flatten::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Flatten::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Flatten::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::Flatten::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_flatten.js b/docs/build/html/classmlx_1_1core_1_1_flatten.js new file mode 100644 index 000000000..93a244871 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_flatten.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_flatten = +[ + [ "Flatten", "classmlx_1_1core_1_1_flatten.html#ab9f72c6a90640b91f35a2bcc8dac8780", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_flatten.html#a72ade7d22386b349712f6c7c1f619842", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_flatten.html#acb2219cc122d218b273af2cb9a882e7f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_flatten.html#a42499e796aac751fceb4628317cc58f4", null ], + [ "jvp", "classmlx_1_1core_1_1_flatten.html#ae0351b8d8088baa09db927ac8546186b", null ], + [ "output_shape", "classmlx_1_1core_1_1_flatten.html#a2f8e1defb9c33af2dec29ff8697132aa", null ], + [ "output_shapes", "classmlx_1_1core_1_1_flatten.html#a5069a73ba1e7b52b7b051f692db6d0d2", null ], + [ "print", "classmlx_1_1core_1_1_flatten.html#ad0495ee66601c7527d836d2db77a6aec", null ], + [ "state", "classmlx_1_1core_1_1_flatten.html#af95dd89c47cd2342233dc0b6d36822a3", null ], + [ "vjp", "classmlx_1_1core_1_1_flatten.html#ab549a8c38b63055e2d5cd672f7676aab", null ], + [ "vmap", "classmlx_1_1core_1_1_flatten.html#a244a03915313286d36ed4d36b01a99f2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_flatten.png b/docs/build/html/classmlx_1_1core_1_1_flatten.png new file mode 100644 index 0000000000000000000000000000000000000000..72505ec5c5c94e25a9bc93df140ab5a526f18491 GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^(}1{xgBeH~F+Z{fQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GUno-U3d6^w7^KI~g;z{92< zzvR^W|3};}GjXzf_;%y&oO7XWz6TAPAHVsh`h3puW*yJPf>D#6sBTd?+3l?DIcffv zKVPo-eZD?n3HLt7*D1Z$S2u>uy1&+E)s**1XW~_J)}EL8vnM!cP35u;Pu+KW1=;#- znU^``ie&D)UzhfHU!9vb&#GA^*K&2(+|*!R%}oE>(a|^OUw>8hbK$k!y0bzjy?S_g zmH!3Dt>1EMSE_ol@7OYH+Wl|W@`TrKeU+@}S-o%3)|`xLq3M;&*LY^ReeRN<>*D## z)X96&o|b7Um7KbspN!UpowMX;KM-rfa4gwp?eS!f^@dy3RtxTByV^CG92|Mex$ zmrt*qwZBbe>z|fuo<}Yoa@9WjEHy~CV*jf@p@*(*k8fHoeS1gvHq*Pmqy8?@toRxD zJa((sJ(aiayEp9%vHeoJSpIs$Xhe&Go-w z6#qWItYYoAXFlayW+|2UEmFCAPW(UHzYF&B``7LZeO^||e<-HbNtX6Kt0-o0*U{JLoIwcAU!cV^G} zs&Z#(sQAAHQG4&b%6-=x<$F56I(vJk_}lyQG_cZ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Floor Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_floor.html b/docs/build/html/classmlx_1_1core_1_1_floor.html index 158b57a6e..f0a79733c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_floor.html +++ b/docs/build/html/classmlx_1_1core_1_1_floor.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Floor Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Floor::output_shapes std::vector< Shape > mlx::core::Floor::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_floor.js b/docs/build/html/classmlx_1_1core_1_1_floor.js new file mode 100644 index 000000000..a3731972c --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_floor.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_floor = +[ + [ "Floor", "classmlx_1_1core_1_1_floor.html#ada4e979b784b732696313d7094e91340", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_floor.html#a1a7dc5f571b7b73e7ef3cbdc1dd1fcf7", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_floor.html#aaa29c83538099eb8f951c95a41f2eb65", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_floor.html#a24b64feb026c4fcd02fc481cffdb1c94", null ], + [ "jvp", "classmlx_1_1core_1_1_floor.html#aa47bc360ec563b6e7d93e8b50626d8af", null ], + [ "output_shapes", "classmlx_1_1core_1_1_floor.html#a0a62dee6df6a82fcd955bf7670be2cd5", null ], + [ "print", "classmlx_1_1core_1_1_floor.html#ac289e87c5fac15e2f491e2513be610f6", null ], + [ "vjp", "classmlx_1_1core_1_1_floor.html#a589e2cf99b6fd1a5ba85534a2a31338e", null ], + [ "vmap", "classmlx_1_1core_1_1_floor.html#aea4dc79a65774990e775ad49519a5d10", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_full-members.html b/docs/build/html/classmlx_1_1core_1_1_full-members.html index 2135a5e95..f7861ce81 100644 --- a/docs/build/html/classmlx_1_1core_1_1_full-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_full-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Full Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_full.html b/docs/build/html/classmlx_1_1core_1_1_full.html index 3b516acaf..b45cbb3da 100644 --- a/docs/build/html/classmlx_1_1core_1_1_full.html +++ b/docs/build/html/classmlx_1_1core_1_1_full.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Full Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -158,7 +172,7 @@ Public Member Functions const Streamstream ()  The stream the primitive will run on.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -346,7 +360,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,7 +403,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -422,7 +436,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -438,10 +452,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_full.js b/docs/build/html/classmlx_1_1core_1_1_full.js new file mode 100644 index 000000000..5fc3ff0f0 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_full.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_full = +[ + [ "Full", "classmlx_1_1core_1_1_full.html#aafcb86a2e41353853ec48c717e0c54d6", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_full.html#a3dccd3756599d7fd018b2af0093b082c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_full.html#aa54f99bb4cba12a551392dea56003872", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_full.html#afafcbcae1e28597fe8f7fde289105792", null ], + [ "jvp", "classmlx_1_1core_1_1_full.html#a281a865d0664596ac8d05ea8e7f26407", null ], + [ "print", "classmlx_1_1core_1_1_full.html#a68e08303f4960ab373b84a3312edc013", null ], + [ "vjp", "classmlx_1_1core_1_1_full.html#a49e76e7a8641f990701abc1b3bd49969", null ], + [ "vmap", "classmlx_1_1core_1_1_full.html#afc57ab6bd9ebdbbf042af54a59785d95", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_gather-members.html b/docs/build/html/classmlx_1_1core_1_1_gather-members.html index e6733eee4..0439678d8 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Gather Member List
    @@ -99,7 +113,7 @@ $(function(){ initResizable(false); }); mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::Gathervirtual mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual - Gather(Stream stream, const std::vector< int > &axes, const std::vector< int > &slice_sizes)mlx::core::Gatherinlineexplicit + Gather(Stream stream, std::vector< int > axes, Shape slice_sizes)mlx::core::Gatherinlineexplicit is_equivalent(const Primitive &other) const overridemlx::core::Gathervirtual jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::Gathervirtual operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Gatherinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Gathervirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Gathervirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Gatherinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Gathervirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Gathervirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather.html b/docs/build/html/classmlx_1_1core_1_1_gather.html index d5cb92af5..49c9d7547 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Gather Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -109,8 +123,8 @@ Inheritance diagram for mlx::core::Gather:
    - - + + @@ -130,9 +144,11 @@ Public Member Functions - + + + @@ -173,8 +189,8 @@ Public Member Functions

    Public Member Functions

     Gather (Stream stream, const std::vector< int > &axes, const std::vector< int > &slice_sizes)
     
     Gather (Stream stream, std::vector< int > axes, Shape slice_sizes)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    std::pair< std::vector< int >, std::vector< int > > state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     

    Constructor & Destructor Documentation

    - -

    ◆ Gather()

    + +

    ◆ Gather()

    @@ -190,17 +206,17 @@ Public Member Functions - const std::vector< int > & axes, + std::vector< int > axes, - const std::vector< int > & slice_sizes ) + Shape slice_sizes ) -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -326,7 +342,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -347,7 +363,7 @@ Public Member Functions - + @@ -355,7 +371,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Gather::output_shapes std::vector< Shape > mlx::core::Gather::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -385,7 +401,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -394,6 +410,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< std::vector< int >, std::vector< int > > mlx::core::Gather::state () const
    +
    +inline
    +
    +
    @@ -428,7 +469,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -461,7 +502,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -477,10 +518,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather.js b/docs/build/html/classmlx_1_1core_1_1_gather.js new file mode 100644 index 000000000..ad9f98e37 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_gather.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_gather = +[ + [ "Gather", "classmlx_1_1core_1_1_gather.html#af24220fde798f2ad17cdce297c0dbc43", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_gather.html#a9ed5587f0d04b59a2b9186c0aac21290", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_gather.html#aec48ee529cb2449915a7b27a3c4361e8", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_gather.html#a23ff1406dbf0c770e75ad47440b467aa", null ], + [ "jvp", "classmlx_1_1core_1_1_gather.html#ac54ef8fac92ab190f1793f3dd95b9e8d", null ], + [ "output_shapes", "classmlx_1_1core_1_1_gather.html#a53d89a6c4ebb634bc208bd85aa2fcda1", null ], + [ "print", "classmlx_1_1core_1_1_gather.html#a9d57637a8a65008683c3847251bdcf91", null ], + [ "state", "classmlx_1_1core_1_1_gather.html#aee59ff90127ef4c2d7fcbe2955b95b27", null ], + [ "vjp", "classmlx_1_1core_1_1_gather.html#aacf612a8f5f1cdbbfd19707d8d33c426", null ], + [ "vmap", "classmlx_1_1core_1_1_gather.html#abab0c4c204e66489825ce80d2194a275", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_m_m-members.html b/docs/build/html/classmlx_1_1core_1_1_gather_m_m-members.html index 2b8f921d5..8a8bd0b61 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather_m_m-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather_m_m-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::GatherMM Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_m_m.html b/docs/build/html/classmlx_1_1core_1_1_gather_m_m.html index 98227cd62..d40ae6a55 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather_m_m.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather_m_m.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::GatherMM Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -158,7 +172,7 @@ Public Member Functions virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes)  The primitive must know how to vectorize itself across the given axes.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -308,7 +322,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -351,7 +365,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -366,10 +380,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_m_m.js b/docs/build/html/classmlx_1_1core_1_1_gather_m_m.js new file mode 100644 index 000000000..8b5558775 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_gather_m_m.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1_gather_m_m = +[ + [ "GatherMM", "classmlx_1_1core_1_1_gather_m_m.html#afd9bbc08138181b80e2fb86536ff3f2a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_gather_m_m.html#a62352074a480df0e1f879b0bae425730", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_gather_m_m.html#ad754c35f460a055cc383ad93a5f72da1", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_gather_m_m.html#a163f17f6ce2c002f22e81b302777342b", null ], + [ "print", "classmlx_1_1core_1_1_gather_m_m.html#ae7a6f4eecb15e95b21e6c87068ebd758", null ], + [ "vjp", "classmlx_1_1core_1_1_gather_m_m.html#a76c9f27c57354f6230b43944882e1bda", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m-members.html b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m-members.html index e14dadcd3..a6f37c8bc 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::GatherQMM Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::GatherQMMinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::GatherQMMvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::GatherQMMvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::GatherQMMinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::GatherQMMvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::GatherQMMvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.html b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.html index f4ce14c36..d58bf19a9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.html +++ b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::GatherQMM Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,6 +144,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions const Streamstream ()  The stream the primitive will run on.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -205,7 +221,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -360,7 +376,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +385,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::GatherQMM::state () const
    +
    +inline
    +
    +
    @@ -403,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +477,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +493,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.js b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.js new file mode 100644 index 000000000..202aba396 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_gather_q_m_m.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_gather_q_m_m = +[ + [ "GatherQMM", "classmlx_1_1core_1_1_gather_q_m_m.html#a60ed2ade7f10dd9c9314913a810f9360", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_gather_q_m_m.html#a89aae98bfbdd6563df44ef7d70f0bf8c", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_gather_q_m_m.html#a86eb048afc95646b2e96ec5493e3d887", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_gather_q_m_m.html#a6a7da6bcf657fcdb157c45bf35fdec11", null ], + [ "jvp", "classmlx_1_1core_1_1_gather_q_m_m.html#adc579058752b927c71b45a962d4869e0", null ], + [ "print", "classmlx_1_1core_1_1_gather_q_m_m.html#a53c3fa7beb51ce2e1c2da28633406fe0", null ], + [ "state", "classmlx_1_1core_1_1_gather_q_m_m.html#a60c908bc836f930bb33f60b3e9db43af", null ], + [ "vjp", "classmlx_1_1core_1_1_gather_q_m_m.html#ae08a4b7d28902d46f39e66beeb0e23ab", null ], + [ "vmap", "classmlx_1_1core_1_1_gather_q_m_m.html#a13ce5e138ebddb8780a034452f68892f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_greater-members.html b/docs/build/html/classmlx_1_1core_1_1_greater-members.html index 393efc68c..6929ee7f3 100644 --- a/docs/build/html/classmlx_1_1core_1_1_greater-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_greater-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Greater Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_greater.html b/docs/build/html/classmlx_1_1core_1_1_greater.html index 416043993..d4b464e73 100644 --- a/docs/build/html/classmlx_1_1core_1_1_greater.html +++ b/docs/build/html/classmlx_1_1core_1_1_greater.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Greater Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Greater::output_shapes std::vector< Shape > mlx::core::Greater::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_greater.js b/docs/build/html/classmlx_1_1core_1_1_greater.js new file mode 100644 index 000000000..41d6246d0 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_greater.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_greater = +[ + [ "Greater", "classmlx_1_1core_1_1_greater.html#a1d5992a66c020cd97a70e8e3d8cd1a1b", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_greater.html#abe1c03f311d0e0b610f3392a6566f2ae", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_greater.html#ae8957cccf4c924d941f57a1bb751c878", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_greater.html#a6877a6888614a618dc64296763ccabb1", null ], + [ "jvp", "classmlx_1_1core_1_1_greater.html#aa47a9f80f45daf6a405e34f6dc7c99c1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_greater.html#af798a7cd704a2a9a8b3ecb6ef49583b0", null ], + [ "print", "classmlx_1_1core_1_1_greater.html#aa2980e45cd2c79ebfb394012d3108a04", null ], + [ "vjp", "classmlx_1_1core_1_1_greater.html#a341766a8a7e41d2a1160d35d4e781679", null ], + [ "vmap", "classmlx_1_1core_1_1_greater.html#a6d8267411fc4951de781f9e8e6c53aa0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_greater_equal-members.html b/docs/build/html/classmlx_1_1core_1_1_greater_equal-members.html index 7a53eeac2..9cc1a3ace 100644 --- a/docs/build/html/classmlx_1_1core_1_1_greater_equal-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_greater_equal-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::GreaterEqual Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_greater_equal.html b/docs/build/html/classmlx_1_1core_1_1_greater_equal.html index 91a285a34..37cb701c3 100644 --- a/docs/build/html/classmlx_1_1core_1_1_greater_equal.html +++ b/docs/build/html/classmlx_1_1core_1_1_greater_equal.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::GreaterEqual Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::GreaterEqual::output_shapes std::vector< Shape > mlx::core::GreaterEqual::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_greater_equal.js b/docs/build/html/classmlx_1_1core_1_1_greater_equal.js new file mode 100644 index 000000000..7ca97ba67 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_greater_equal.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_greater_equal = +[ + [ "GreaterEqual", "classmlx_1_1core_1_1_greater_equal.html#a19a3c49d5a9b40e17da0e56ef6908527", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_greater_equal.html#a15469125b9bea89b64bfeac01590c075", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_greater_equal.html#ac246263b4548126c3d4ab7e392575d24", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_greater_equal.html#a3daef8596b963026b602019bc56fc5fc", null ], + [ "jvp", "classmlx_1_1core_1_1_greater_equal.html#ac7346080aaaa01d52896127f383f9d20", null ], + [ "output_shapes", "classmlx_1_1core_1_1_greater_equal.html#a1a77c18d89ee227171ff38efef6cacf6", null ], + [ "print", "classmlx_1_1core_1_1_greater_equal.html#ab98045c861d2d2ffb0398c2c1d671cef", null ], + [ "vjp", "classmlx_1_1core_1_1_greater_equal.html#a62f07a4ac54c708307c82aac0e5693ee", null ], + [ "vmap", "classmlx_1_1core_1_1_greater_equal.html#ab0e1be93eb01b0ce7fa83e953f5e3e1d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_hadamard-members.html b/docs/build/html/classmlx_1_1core_1_1_hadamard-members.html index 7ea5ac4a9..e7eb8ad65 100644 --- a/docs/build/html/classmlx_1_1core_1_1_hadamard-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_hadamard-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Hadamard Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Hadamardinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Hadamardvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Hadamardvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Hadamardinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Hadamardvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Hadamardvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_hadamard.html b/docs/build/html/classmlx_1_1core_1_1_hadamard.html index 862612c8d..1095b8f82 100644 --- a/docs/build/html/classmlx_1_1core_1_1_hadamard.html +++ b/docs/build/html/classmlx_1_1core_1_1_hadamard.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Hadamard Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Hadamard::output_shapes std::vector< Shape > mlx::core::Hadamard::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Hadamard::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_hadamard.js b/docs/build/html/classmlx_1_1core_1_1_hadamard.js new file mode 100644 index 000000000..61b8e60d8 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_hadamard.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_hadamard = +[ + [ "Hadamard", "classmlx_1_1core_1_1_hadamard.html#abe4a0ed820b126940beec519d4239923", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_hadamard.html#ab27d6a9df42b3aab41ace3073a4c880d", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_hadamard.html#a2470feb690f5463138490763c38b5733", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_hadamard.html#a8a528d8d69a7343bdfd704a3e74230b8", null ], + [ "jvp", "classmlx_1_1core_1_1_hadamard.html#a22b9d55ae3ba5eef63505124696e712a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_hadamard.html#aa709166de3c493308689769579d665e8", null ], + [ "print", "classmlx_1_1core_1_1_hadamard.html#a3df6e7e3b3b71bf50be5f1a05d0870b6", null ], + [ "state", "classmlx_1_1core_1_1_hadamard.html#afd67d09fde38ab3b6ba873b797f03dae", null ], + [ "vjp", "classmlx_1_1core_1_1_hadamard.html#af4134775427b8998d66f489468b98656", null ], + [ "vmap", "classmlx_1_1core_1_1_hadamard.html#a9f1a172e6246859e813002abe9b8f99c", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_imag-members.html b/docs/build/html/classmlx_1_1core_1_1_imag-members.html index faa681b6b..fdd6c755c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_imag-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_imag-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Imag Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_imag.html b/docs/build/html/classmlx_1_1core_1_1_imag.html index cece5f6fa..23cdd6a49 100644 --- a/docs/build/html/classmlx_1_1core_1_1_imag.html +++ b/docs/build/html/classmlx_1_1core_1_1_imag.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Imag Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Imag::output_shapes std::vector< Shape > mlx::core::Imag::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_imag.js b/docs/build/html/classmlx_1_1core_1_1_imag.js new file mode 100644 index 000000000..675c8547f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_imag.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_imag = +[ + [ "Imag", "classmlx_1_1core_1_1_imag.html#a284b7de34a316110fdc98e7b753372b2", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_imag.html#a17d1f1f9f8528668fcdf39b636720829", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_imag.html#a247a4d059b0a99678c6be8c15e42c1e6", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_imag.html#a51c15ae82855edebba2ba779516465f5", null ], + [ "jvp", "classmlx_1_1core_1_1_imag.html#ac01c5ed9b886983450ed9f049ddac55a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_imag.html#ad4f847483ba07d20aba5b927c2689be8", null ], + [ "print", "classmlx_1_1core_1_1_imag.html#a0c8d48e2a1474d80a314ea9b96dbaa8d", null ], + [ "vjp", "classmlx_1_1core_1_1_imag.html#a80da5fdd0fa549eebd7804c0e261848b", null ], + [ "vmap", "classmlx_1_1core_1_1_imag.html#ace9906672bd88df0573653883d58ecb3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_inverse-members.html b/docs/build/html/classmlx_1_1core_1_1_inverse-members.html index 95a0d738b..c9b7115ff 100644 --- a/docs/build/html/classmlx_1_1core_1_1_inverse-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_inverse-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Inverse Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Inverseinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Inversevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Inverseinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Inversevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_inverse.html b/docs/build/html/classmlx_1_1core_1_1_inverse.html index e1653bf32..2164ff35c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_inverse.html +++ b/docs/build/html/classmlx_1_1core_1_1_inverse.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Inverse Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -121,6 +135,8 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -200,7 +216,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -297,6 +313,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Inverse::state () const
    +
    +inline
    +
    +
    @@ -321,7 +362,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -337,10 +378,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_inverse.js b/docs/build/html/classmlx_1_1core_1_1_inverse.js new file mode 100644 index 000000000..0d0c71a19 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_inverse.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1_inverse = +[ + [ "Inverse", "classmlx_1_1core_1_1_inverse.html#a71467681e523abb725724490bfeb76ad", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_inverse.html#aeb1d8dc9bc4052a616023f65b3c7bb81", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_inverse.html#a086fbbc947ad232e01686ad063a78ed2", null ], + [ "print", "classmlx_1_1core_1_1_inverse.html#a543f18f1ce5c06c897141091e95a66e9", null ], + [ "state", "classmlx_1_1core_1_1_inverse.html#aa1fce744f4a2d660c65901a7542056f2", null ], + [ "vmap", "classmlx_1_1core_1_1_inverse.html#a98419b9f0b8a6c9185fe012d523552c2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/struct_limits_3_01int8__t_01_4-members.html b/docs/build/html/classmlx_1_1core_1_1_jit_compiler-members.html similarity index 55% rename from docs/build/html/struct_limits_3_01int8__t_01_4-members.html rename to docs/build/html/classmlx_1_1core_1_1_jit_compiler-members.html index 5d7606346..7fb68ea39 100644 --- a/docs/build/html/struct_limits_3_01int8__t_01_4-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_jit_compiler-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    -
    -
    -
    Limits< int8_t > Member List
    +
    mlx::core::JitCompiler Member List
    -

    This is the complete list of members for Limits< int8_t >, including all inherited members.

    +

    This is the complete list of members for mlx::core::JitCompiler, including all inherited members.

    - - - - + +
    finite_maxLimits< int8_t >static
    finite_minLimits< int8_t >static
    maxLimits< int8_t >static
    minLimits< int8_t >static
    build_command(const std::filesystem::path &dir, const std::string &source_file_name, const std::string &shared_lib_name)mlx::core::JitCompilerstatic
    exec(const std::string &cmd)mlx::core::JitCompilerstatic
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_jit_compiler.html b/docs/build/html/classmlx_1_1core_1_1_jit_compiler.html new file mode 100644 index 000000000..f69b5f970 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_jit_compiler.html @@ -0,0 +1,194 @@ + + + + + + + +MLX: mlx::core::JitCompiler Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::JitCompiler Class Reference
    +
    +
    + +

    #include <jit_compiler.h>

    + + + + + + +

    +Static Public Member Functions

    static std::string build_command (const std::filesystem::path &dir, const std::string &source_file_name, const std::string &shared_lib_name)
     
    static std::string exec (const std::string &cmd)
     
    +

    Member Function Documentation

    + +

    ◆ build_command()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    static std::string mlx::core::JitCompiler::build_command (const std::filesystem::path & dir,
    const std::string & source_file_name,
    const std::string & shared_lib_name )
    +
    +static
    +
    + +
    +
    + +

    ◆ exec()

    + +
    +
    + + + + + +
    + + + + + + + +
    static std::string mlx::core::JitCompiler::exec (const std::string & cmd)
    +
    +static
    +
    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_jit_compiler.js b/docs/build/html/classmlx_1_1core_1_1_jit_compiler.js new file mode 100644 index 000000000..b9b0b45b3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_jit_compiler.js @@ -0,0 +1,5 @@ +var classmlx_1_1core_1_1_jit_compiler = +[ + [ "build_command", "classmlx_1_1core_1_1_jit_compiler.html#a10a5cde91ab929ccbdbdf4c4d940f156", null ], + [ "exec", "classmlx_1_1core_1_1_jit_compiler.html#adcf98f940e1919388eaab907ea17a540", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_less-members.html b/docs/build/html/classmlx_1_1core_1_1_less-members.html index 04fcd75f4..6b80c8735 100644 --- a/docs/build/html/classmlx_1_1core_1_1_less-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_less-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Less Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_less.html b/docs/build/html/classmlx_1_1core_1_1_less.html index eed868815..3c2cb752b 100644 --- a/docs/build/html/classmlx_1_1core_1_1_less.html +++ b/docs/build/html/classmlx_1_1core_1_1_less.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Less Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Less::output_shapes std::vector< Shape > mlx::core::Less::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_less.js b/docs/build/html/classmlx_1_1core_1_1_less.js new file mode 100644 index 000000000..27003a5c3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_less.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_less = +[ + [ "Less", "classmlx_1_1core_1_1_less.html#aa55c5cfbab0ac30e1b72c080fe9525d7", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_less.html#a32624124ffece066f496b3299056bcef", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_less.html#a353335ce06ddbe8498d86d129c835917", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_less.html#a7d6ed6353a0dcefebd008026dbd3cd63", null ], + [ "jvp", "classmlx_1_1core_1_1_less.html#af1493d566f6d940b8f674aac17f5dfce", null ], + [ "output_shapes", "classmlx_1_1core_1_1_less.html#ad7604a75b79260d263ac0c7d959cadd5", null ], + [ "print", "classmlx_1_1core_1_1_less.html#ad67e6f66d7b75546fd98dbee6b631d78", null ], + [ "vjp", "classmlx_1_1core_1_1_less.html#aaf205d389b5e602e0814b68f66de8f50", null ], + [ "vmap", "classmlx_1_1core_1_1_less.html#a5fee5956cf087d8405359121aa62ba7e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_less_equal-members.html b/docs/build/html/classmlx_1_1core_1_1_less_equal-members.html index 819db5b3e..380fbc6e9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_less_equal-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_less_equal-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::LessEqual Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_less_equal.html b/docs/build/html/classmlx_1_1core_1_1_less_equal.html index 4db799314..277bbf4dd 100644 --- a/docs/build/html/classmlx_1_1core_1_1_less_equal.html +++ b/docs/build/html/classmlx_1_1core_1_1_less_equal.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::LessEqual Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::LessEqual::output_shapes std::vector< Shape > mlx::core::LessEqual::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_less_equal.js b/docs/build/html/classmlx_1_1core_1_1_less_equal.js new file mode 100644 index 000000000..1a1f05874 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_less_equal.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_less_equal = +[ + [ "LessEqual", "classmlx_1_1core_1_1_less_equal.html#a52492a43224d47e7851beec646c27bbc", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_less_equal.html#a55d1352b0e97841a92503bc57c19ed16", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_less_equal.html#acf035a82b11e6f63742143ea540fedac", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_less_equal.html#a76ee1438cf4bd109eae4e0b3472b26af", null ], + [ "jvp", "classmlx_1_1core_1_1_less_equal.html#addfe62d3557d216f8307bdf1cbff6a8f", null ], + [ "output_shapes", "classmlx_1_1core_1_1_less_equal.html#a5598c700e881673098928e47b4da9ff8", null ], + [ "print", "classmlx_1_1core_1_1_less_equal.html#a409842d3862113c53cbbdf7467a06950", null ], + [ "vjp", "classmlx_1_1core_1_1_less_equal.html#aab2aab7590c299885e815c18eedd1028", null ], + [ "vmap", "classmlx_1_1core_1_1_less_equal.html#a3d5df21db184f2b7620cda9da1684480", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_load-members.html b/docs/build/html/classmlx_1_1core_1_1_load-members.html index 6732a8c53..38c33199c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_load-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_load-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Load Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_load.html b/docs/build/html/classmlx_1_1core_1_1_load.html index 0f7acf0f1..aa8a4ba1a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_load.html +++ b/docs/build/html/classmlx_1_1core_1_1_load.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Load Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -158,7 +172,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -205,7 +219,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +249,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +280,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +307,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -308,10 +322,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_load.js b/docs/build/html/classmlx_1_1core_1_1_load.js new file mode 100644 index 000000000..5367ca6fc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_load.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1_load = +[ + [ "Load", "classmlx_1_1core_1_1_load.html#a3aa8a537cd90bab048df47dca1ed526a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_load.html#ada026ac30566f3109d8182e35d307c0a", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_load.html#a06933e887ea94a4d01d81195c5e07a3d", null ], + [ "print", "classmlx_1_1core_1_1_load.html#a54e08a0ca41b7c9f1a76b00c889f0bfa", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_log-members.html b/docs/build/html/classmlx_1_1core_1_1_log-members.html index cf2377ed5..cbe275b37 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_log-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Log Member List
    @@ -113,21 +127,24 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Loginlinevirtual - stream()mlx::core::Primitiveinline - ten enum valuemlx::core::Log - two enum valuemlx::core::Log - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Logvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Logvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Loginline + stream()mlx::core::Primitiveinline + ten enum valuemlx::core::Log + two enum valuemlx::core::Log + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Logvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Logvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log.html b/docs/build/html/classmlx_1_1core_1_1_log.html index 8363184f5..4fd8ce31c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log.html +++ b/docs/build/html/classmlx_1_1core_1_1_log.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Log Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Types | @@ -136,9 +150,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +Base state () const +  void print (std::ostream &os) override  Print the primitive.
      @@ -224,7 +240,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -254,7 +270,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -285,7 +301,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -312,7 +328,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -350,7 +366,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -371,7 +387,7 @@ Public Member Functions - + @@ -379,7 +395,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Log::output_shapes std::vector< Shape > mlx::core::Log::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -409,7 +425,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -418,6 +434,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    Base mlx::core::Log::state () const
    +
    +inline
    +
    +
    @@ -452,7 +493,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -485,7 +526,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -501,10 +542,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log.js b/docs/build/html/classmlx_1_1core_1_1_log.js new file mode 100644 index 000000000..77af04129 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_log.js @@ -0,0 +1,18 @@ +var classmlx_1_1core_1_1_log = +[ + [ "Base", "classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421", [ + [ "two", "classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421a41877eab6fa3db7d7ed2cda9eba14251", null ], + [ "ten", "classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421a394d85b39676763bdf35b8d54b9e43a1", null ], + [ "e", "classmlx_1_1core_1_1_log.html#a044a23e8b1422984628e1cd5ab506421a491d45f7af463017c1f8cae94cd05590", null ] + ] ], + [ "Log", "classmlx_1_1core_1_1_log.html#a663e54790c60b56eb0ff09f4f6635fb9", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_log.html#aadc7bb4cb24f3ecbbb9ed54a699ab74f", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_log.html#aaaa49e9455f3a197bc319646b5ca6390", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_log.html#a2fc58ea4ca744db493b947d1136d05f8", null ], + [ "jvp", "classmlx_1_1core_1_1_log.html#ac646d4155322c34f58183d97301e3832", null ], + [ "output_shapes", "classmlx_1_1core_1_1_log.html#ab2cae6889352ca0674f6463f8f52d77d", null ], + [ "print", "classmlx_1_1core_1_1_log.html#a7b946d98d4a228c6be9f606a3bd8a30d", null ], + [ "state", "classmlx_1_1core_1_1_log.html#a86fca2ec3766f5d4a2e6d8ba2983c3aa", null ], + [ "vjp", "classmlx_1_1core_1_1_log.html#a40885dccfbf928c4d035881be1d49280", null ], + [ "vmap", "classmlx_1_1core_1_1_log.html#a007ddbcf911093231f607a8b9ed5cd49", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_log1p-members.html b/docs/build/html/classmlx_1_1core_1_1_log1p-members.html index a24e6f8f9..bda7101c2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log1p-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_log1p-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Log1p Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log1p.html b/docs/build/html/classmlx_1_1core_1_1_log1p.html index 5421330ff..75a421053 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log1p.html +++ b/docs/build/html/classmlx_1_1core_1_1_log1p.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Log1p Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +302,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -309,7 +323,7 @@ Public Member Functions - + @@ -317,7 +331,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Log1p::output_shapes std::vector< Shape > mlx::core::Log1p::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -347,7 +361,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -390,7 +404,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -423,7 +437,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -439,10 +453,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log1p.js b/docs/build/html/classmlx_1_1core_1_1_log1p.js new file mode 100644 index 000000000..09c468a0a --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_log1p.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_log1p = +[ + [ "Log1p", "classmlx_1_1core_1_1_log1p.html#ab0d6eb90c6f98775fce56f3446ff127a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_log1p.html#a8192e5438de99c4cda056987935cba23", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_log1p.html#a1b97decae7338d46874e736c95fa7431", null ], + [ "jvp", "classmlx_1_1core_1_1_log1p.html#a537e44c7c993daf48698082e75e71ba2", null ], + [ "output_shapes", "classmlx_1_1core_1_1_log1p.html#a73a02ddf0f125fff83462d97146a0a08", null ], + [ "print", "classmlx_1_1core_1_1_log1p.html#a8a1569dde30440ce11ea466ccc69d2d4", null ], + [ "vjp", "classmlx_1_1core_1_1_log1p.html#a3113c1d2b4c5e73d0b470f42dc48a880", null ], + [ "vmap", "classmlx_1_1core_1_1_log1p.html#a7122576f95ce479926bbbbc690891f71", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_log_add_exp-members.html b/docs/build/html/classmlx_1_1core_1_1_log_add_exp-members.html index 33e2637bc..2b327f984 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log_add_exp-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_log_add_exp-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::LogAddExp Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log_add_exp.html b/docs/build/html/classmlx_1_1core_1_1_log_add_exp.html index b1e92fbf4..bfe8b36e2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_log_add_exp.html +++ b/docs/build/html/classmlx_1_1core_1_1_log_add_exp.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::LogAddExp Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::LogAddExp::output_shapes std::vector< Shape > mlx::core::LogAddExp::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_log_add_exp.js b/docs/build/html/classmlx_1_1core_1_1_log_add_exp.js new file mode 100644 index 000000000..0dd362621 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_log_add_exp.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_log_add_exp = +[ + [ "LogAddExp", "classmlx_1_1core_1_1_log_add_exp.html#ad8938ca90ccf1a3259973fc68902975a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_log_add_exp.html#abef17fb590b1a8d356f2a580e45d41f0", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_log_add_exp.html#acace355b62ec00df649f9f99e8f2eb7a", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_log_add_exp.html#a3cf9a202c05aff39919d713d6e2b32e4", null ], + [ "jvp", "classmlx_1_1core_1_1_log_add_exp.html#aea2d1d58794e86f3488219ed3fa14329", null ], + [ "output_shapes", "classmlx_1_1core_1_1_log_add_exp.html#a234f8c8ea5f5bf2fb7e371588fea98b9", null ], + [ "print", "classmlx_1_1core_1_1_log_add_exp.html#a702a2eff0bd1ae7b6fb829dd0b0b11b9", null ], + [ "vjp", "classmlx_1_1core_1_1_log_add_exp.html#ae231af0ed24a93eb647ee58c2d2b20b4", null ], + [ "vmap", "classmlx_1_1core_1_1_log_add_exp.html#a82190aa1421a9734b6e9480debffac78", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_and-members.html b/docs/build/html/classmlx_1_1core_1_1_logical_and-members.html index dece0f0b4..0f89430a5 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_and-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_and-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::LogicalAnd Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_and.html b/docs/build/html/classmlx_1_1core_1_1_logical_and.html index b7878e49c..57cdc0649 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_and.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_and.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::LogicalAnd Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::LogicalAnd::output_shapes std::vector< Shape > mlx::core::LogicalAnd::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_and.js b/docs/build/html/classmlx_1_1core_1_1_logical_and.js new file mode 100644 index 000000000..0e3bd356a --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_logical_and.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_logical_and = +[ + [ "LogicalAnd", "classmlx_1_1core_1_1_logical_and.html#aaf2cab8ffcf6606b8babfef60fc06fb3", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_logical_and.html#adbe1c1785af1a8b827289d22b0d170b3", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_logical_and.html#a132b2eedaa3978de5a5350da3c2ca40f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_logical_and.html#a9572c35f72e0db2f7f86bbf42438a6be", null ], + [ "jvp", "classmlx_1_1core_1_1_logical_and.html#a78d3be71da224ea19158cf9e8c4cf434", null ], + [ "output_shapes", "classmlx_1_1core_1_1_logical_and.html#a266f1eaced19b8b11e273de9219cf9ed", null ], + [ "print", "classmlx_1_1core_1_1_logical_and.html#a9a5220eb56e1fd94fd879394ee5ad397", null ], + [ "vjp", "classmlx_1_1core_1_1_logical_and.html#ae42f8fc454577b0fd6410cae9d5f3b54", null ], + [ "vmap", "classmlx_1_1core_1_1_logical_and.html#aacc5f6f53ffc327b7771485e3da2a4e5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_not-members.html b/docs/build/html/classmlx_1_1core_1_1_logical_not-members.html index 88a5f9b08..458a4e3fe 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_not-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_not-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::LogicalNot Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_not.html b/docs/build/html/classmlx_1_1core_1_1_logical_not.html index 2390bf350..36d26ac23 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_not.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_not.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::LogicalNot Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::LogicalNot::output_shapes std::vector< Shape > mlx::core::LogicalNot::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_not.js b/docs/build/html/classmlx_1_1core_1_1_logical_not.js new file mode 100644 index 000000000..9dc7ec6d5 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_logical_not.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_logical_not = +[ + [ "LogicalNot", "classmlx_1_1core_1_1_logical_not.html#a6f5850b4c78b83d5e2c0d37437fc79b7", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_logical_not.html#acf3f7b3b20ca69533536e0e0a05725b3", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_logical_not.html#a1d0d2bc93f935eca6c85ef7bf67f2d6a", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_logical_not.html#aba53675da351cd9b71a73d475b4bbe99", null ], + [ "jvp", "classmlx_1_1core_1_1_logical_not.html#a4838c483ced707cfda3d6cd24bf4667c", null ], + [ "output_shapes", "classmlx_1_1core_1_1_logical_not.html#ad3889969521c6a040aa2f26caee219b7", null ], + [ "print", "classmlx_1_1core_1_1_logical_not.html#a001ff3eca46440f0d8a287e0b98a8a2c", null ], + [ "vjp", "classmlx_1_1core_1_1_logical_not.html#af2c3c241cf3910fbaba013c69d052a50", null ], + [ "vmap", "classmlx_1_1core_1_1_logical_not.html#a5308a271619ee74df561b0aaf525915d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_or-members.html b/docs/build/html/classmlx_1_1core_1_1_logical_or-members.html index 6d808d6e3..1c5426e88 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_or-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_or-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::LogicalOr Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_or.html b/docs/build/html/classmlx_1_1core_1_1_logical_or.html index c931a5265..463cac807 100644 --- a/docs/build/html/classmlx_1_1core_1_1_logical_or.html +++ b/docs/build/html/classmlx_1_1core_1_1_logical_or.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::LogicalOr Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::LogicalOr::output_shapes std::vector< Shape > mlx::core::LogicalOr::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_logical_or.js b/docs/build/html/classmlx_1_1core_1_1_logical_or.js new file mode 100644 index 000000000..eef563ea3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_logical_or.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_logical_or = +[ + [ "LogicalOr", "classmlx_1_1core_1_1_logical_or.html#a269c22daca1c15ad010bb860bce93918", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_logical_or.html#a13cd4cbf26589287e85aeaaca42d7f62", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_logical_or.html#a3be1da328f0f8620de2e4fc1d22a077a", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_logical_or.html#a9c8b10a5cf5c69fdc2362390197e4e71", null ], + [ "jvp", "classmlx_1_1core_1_1_logical_or.html#a292de6001c551214c8152a7a5b0e6bd4", null ], + [ "output_shapes", "classmlx_1_1core_1_1_logical_or.html#a931b98fca3e19085af9fa97a43db8ced", null ], + [ "print", "classmlx_1_1core_1_1_logical_or.html#a6becc5fbfadde850de9857099dcd5003", null ], + [ "vjp", "classmlx_1_1core_1_1_logical_or.html#a51aed488f52d5031998689af9cb17847", null ], + [ "vmap", "classmlx_1_1core_1_1_logical_or.html#a6e2e77e6aaf47872b2e96b151c32daf3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_matmul-members.html b/docs/build/html/classmlx_1_1core_1_1_matmul-members.html index 3fccc14b4..e6e83dae9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_matmul-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_matmul-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Matmul Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_matmul.html b/docs/build/html/classmlx_1_1core_1_1_matmul.html index 9c0590ed8..23f92637c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_matmul.html +++ b/docs/build/html/classmlx_1_1core_1_1_matmul.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Matmul Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -300,7 +314,7 @@ Public Member Functions - + @@ -308,7 +322,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Matmul::output_shapes std::vector< Shape > mlx::core::Matmul::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -381,7 +395,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -414,7 +428,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -430,10 +444,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_matmul.js b/docs/build/html/classmlx_1_1core_1_1_matmul.js new file mode 100644 index 000000000..19421e22d --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_matmul.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_matmul = +[ + [ "Matmul", "classmlx_1_1core_1_1_matmul.html#adef92f30ab35e540ccb316ea6b94e6f7", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_matmul.html#a357a7f57a2a220a91977f810a69413fc", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_matmul.html#a8707a4e9b75c769e8f1dbca15c6a1ae7", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_matmul.html#aab372b59eae0840fc4f75ef5719a2630", null ], + [ "output_shapes", "classmlx_1_1core_1_1_matmul.html#abfabe69f428f7f125bf5665713a0eb5c", null ], + [ "print", "classmlx_1_1core_1_1_matmul.html#abb4a16a265a05d56a2f5d2e89d6f9dfd", null ], + [ "vjp", "classmlx_1_1core_1_1_matmul.html#a524136cca481598ea20894d85ca66bb0", null ], + [ "vmap", "classmlx_1_1core_1_1_matmul.html#a3a1c6e70bac300240760fe41a58340c2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_maximum-members.html b/docs/build/html/classmlx_1_1core_1_1_maximum-members.html index 4016565ff..555aef7d2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_maximum-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_maximum-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Maximum Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_maximum.html b/docs/build/html/classmlx_1_1core_1_1_maximum.html index 3171731aa..bc15c2c44 100644 --- a/docs/build/html/classmlx_1_1core_1_1_maximum.html +++ b/docs/build/html/classmlx_1_1core_1_1_maximum.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Maximum Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Maximum::output_shapes std::vector< Shape > mlx::core::Maximum::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_maximum.js b/docs/build/html/classmlx_1_1core_1_1_maximum.js new file mode 100644 index 000000000..473a287d2 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_maximum.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_maximum = +[ + [ "Maximum", "classmlx_1_1core_1_1_maximum.html#a28389307e385efe1b2955b86b115e816", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_maximum.html#a62b38fbe5f96db58c2b60165ac4eadcf", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_maximum.html#ade0f721b10a6b3a12bdadd34c48f72a7", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_maximum.html#a21fe93fbd7799682f481260aee8bdb46", null ], + [ "jvp", "classmlx_1_1core_1_1_maximum.html#a25ac5d5b453e571bf7240aa8de103c39", null ], + [ "output_shapes", "classmlx_1_1core_1_1_maximum.html#a888a69fb68726c3c18973f3ea38cfd2b", null ], + [ "print", "classmlx_1_1core_1_1_maximum.html#a3b708a1d6b526719c62850294776f8ca", null ], + [ "vjp", "classmlx_1_1core_1_1_maximum.html#a7de15d7b28784e24bbfc7e85ddcbcff3", null ], + [ "vmap", "classmlx_1_1core_1_1_maximum.html#ab664918e0d71cfec1318a9879e78c5d3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_minimum-members.html b/docs/build/html/classmlx_1_1core_1_1_minimum-members.html index 5dbe55d50..8add0b4c1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_minimum-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_minimum-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Minimum Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_minimum.html b/docs/build/html/classmlx_1_1core_1_1_minimum.html index 115df15ca..0c526d57b 100644 --- a/docs/build/html/classmlx_1_1core_1_1_minimum.html +++ b/docs/build/html/classmlx_1_1core_1_1_minimum.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Minimum Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Minimum::output_shapes std::vector< Shape > mlx::core::Minimum::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_minimum.js b/docs/build/html/classmlx_1_1core_1_1_minimum.js new file mode 100644 index 000000000..3bdda3217 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_minimum.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_minimum = +[ + [ "Minimum", "classmlx_1_1core_1_1_minimum.html#ab0f2ce17108df44b82cff68886b0f6f5", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_minimum.html#a6b93f493ee87089943a8085fe59dfc6e", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_minimum.html#aadc68afa0afbe2103f19d161f5e0a2ba", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_minimum.html#a56c54ee3293cc2cd84462b9ec7ac36b4", null ], + [ "jvp", "classmlx_1_1core_1_1_minimum.html#a10acf4fef35eed7ca55d131b5ae2d038", null ], + [ "output_shapes", "classmlx_1_1core_1_1_minimum.html#af921b5202ebf9716972bcf0e3056742a", null ], + [ "print", "classmlx_1_1core_1_1_minimum.html#a137677bf32c626a768b732a7b8575512", null ], + [ "vjp", "classmlx_1_1core_1_1_minimum.html#a48a0cbe3a6c4f7473c00e343f63b5204", null ], + [ "vmap", "classmlx_1_1core_1_1_minimum.html#adab0f31acf68075a0be908d8eb882980", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_multiply-members.html b/docs/build/html/classmlx_1_1core_1_1_multiply-members.html index 3bd012ccb..2d795dcbb 100644 --- a/docs/build/html/classmlx_1_1core_1_1_multiply-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_multiply-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Multiply Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_multiply.html b/docs/build/html/classmlx_1_1core_1_1_multiply.html index 8463dd354..516fbc8fe 100644 --- a/docs/build/html/classmlx_1_1core_1_1_multiply.html +++ b/docs/build/html/classmlx_1_1core_1_1_multiply.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Multiply Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Multiply::output_shapes std::vector< Shape > mlx::core::Multiply::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_multiply.js b/docs/build/html/classmlx_1_1core_1_1_multiply.js new file mode 100644 index 000000000..16fba2666 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_multiply.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_multiply = +[ + [ "Multiply", "classmlx_1_1core_1_1_multiply.html#aca5c50f900321f3eb4d6fbcbc225c00c", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_multiply.html#a624fce06c047cdc4dfdbdcaaddb25f34", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_multiply.html#a634fcb4e981d8d3f4d94252caf25bee0", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_multiply.html#ae288159fa2d6d35087a85aca8eafa9b2", null ], + [ "jvp", "classmlx_1_1core_1_1_multiply.html#a79f7f0bb70de2e3e41a66c96285325b4", null ], + [ "output_shapes", "classmlx_1_1core_1_1_multiply.html#adfd4c7f89660b42ab58e088b1ae19435", null ], + [ "print", "classmlx_1_1core_1_1_multiply.html#aa4f1f7af68346ce80c2636df415c9909", null ], + [ "vjp", "classmlx_1_1core_1_1_multiply.html#a74b7556ec03e2c3d3f971666d06f5db1", null ], + [ "vmap", "classmlx_1_1core_1_1_multiply.html#ae7e82c8fc8cbaf4e00c27eb54fac7dbf", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_negative-members.html b/docs/build/html/classmlx_1_1core_1_1_negative-members.html index 439342b71..26a20657a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_negative-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_negative-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Negative Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_negative.html b/docs/build/html/classmlx_1_1core_1_1_negative.html index 5ccf45862..a4c00ba7c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_negative.html +++ b/docs/build/html/classmlx_1_1core_1_1_negative.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Negative Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Negative::output_shapes std::vector< Shape > mlx::core::Negative::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_negative.js b/docs/build/html/classmlx_1_1core_1_1_negative.js new file mode 100644 index 000000000..2cf226cb3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_negative.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_negative = +[ + [ "Negative", "classmlx_1_1core_1_1_negative.html#aa3b73395d9fa5b7215dca488bc0d3c70", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_negative.html#af43553dc418c8ebe75fa9cdcba103c3b", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_negative.html#a97f1b316eace0c6d9e576d766940c75b", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_negative.html#ac2a4d8159c548639d6289980c8975823", null ], + [ "jvp", "classmlx_1_1core_1_1_negative.html#a7d918f9b26b8fb7b047a27d85ebab979", null ], + [ "output_shapes", "classmlx_1_1core_1_1_negative.html#a606fb13a48d10c88707f1a2c41bee9e8", null ], + [ "print", "classmlx_1_1core_1_1_negative.html#a0d5c30e267ff6468d64f1987f9f83f91", null ], + [ "vjp", "classmlx_1_1core_1_1_negative.html#a889585f056d33bda30c30311257af52a", null ], + [ "vmap", "classmlx_1_1core_1_1_negative.html#a1f8a6079e272f1a0599f88a1a8419cf0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_not_equal-members.html b/docs/build/html/classmlx_1_1core_1_1_not_equal-members.html index fde404ae4..f3aa4871f 100644 --- a/docs/build/html/classmlx_1_1core_1_1_not_equal-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_not_equal-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::NotEqual Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_not_equal.html b/docs/build/html/classmlx_1_1core_1_1_not_equal.html index d7e087adf..dead784e2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_not_equal.html +++ b/docs/build/html/classmlx_1_1core_1_1_not_equal.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::NotEqual Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::NotEqual::output_shapes std::vector< Shape > mlx::core::NotEqual::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_not_equal.js b/docs/build/html/classmlx_1_1core_1_1_not_equal.js new file mode 100644 index 000000000..318e5a7df --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_not_equal.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_not_equal = +[ + [ "NotEqual", "classmlx_1_1core_1_1_not_equal.html#ac568397bd17b5d9f25ad1a0ebadedbb9", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_not_equal.html#a8f95f8b5873850b875b1641df8196047", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_not_equal.html#a61179747e34e203150e9c660dfddb5f2", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_not_equal.html#ac12fd6b3e2f2e7e4e622b59badf2c73d", null ], + [ "jvp", "classmlx_1_1core_1_1_not_equal.html#ae2d3e5776efaefed7f4c73f679b02f17", null ], + [ "output_shapes", "classmlx_1_1core_1_1_not_equal.html#ad1e8a577dc103d96f1ab65bf3b389d35", null ], + [ "print", "classmlx_1_1core_1_1_not_equal.html#a12aa2f764880d29e627540610b63af09", null ], + [ "vjp", "classmlx_1_1core_1_1_not_equal.html#a0361f29f4ae1235bdf3f3304527e2d4b", null ], + [ "vmap", "classmlx_1_1core_1_1_not_equal.html#ab8b57932f03c8eee664bf89adeaa43b5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_number_of_elements-members.html b/docs/build/html/classmlx_1_1core_1_1_number_of_elements-members.html index dd47e78c7..6304754ef 100644 --- a/docs/build/html/classmlx_1_1core_1_1_number_of_elements-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_number_of_elements-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::NumberOfElements Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::NumberOfElementsinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::NumberOfElementsvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::NumberOfElementsinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::NumberOfElementsvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_number_of_elements.html b/docs/build/html/classmlx_1_1core_1_1_number_of_elements.html index c61a1ede1..fc03f423d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_number_of_elements.html +++ b/docs/build/html/classmlx_1_1core_1_1_number_of_elements.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::NumberOfElements Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -124,9 +138,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +std::tuple< std::vector< int >, bool, Dtypestate () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -205,7 +221,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -314,7 +330,7 @@ Public Member Functions - + @@ -322,7 +338,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::NumberOfElements::output_shapes std::vector< Shape > mlx::core::NumberOfElements::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -352,7 +368,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -361,6 +377,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::tuple< std::vector< int >, bool, Dtype > mlx::core::NumberOfElements::state () const
    +
    +inline
    +
    +
    @@ -385,7 +426,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -401,10 +442,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_number_of_elements.js b/docs/build/html/classmlx_1_1core_1_1_number_of_elements.js new file mode 100644 index 000000000..e88fa21f3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_number_of_elements.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1_number_of_elements = +[ + [ "NumberOfElements", "classmlx_1_1core_1_1_number_of_elements.html#ac64d7c40ae29d687f8b7d2fa33e13b06", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_number_of_elements.html#acc328321cf5300874ee884367cbede3f", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_number_of_elements.html#a2c98c42915fb2bfe12f5c99ea553eff5", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_number_of_elements.html#ad6a32565ccc64499e368e15bba0b438f", null ], + [ "output_shapes", "classmlx_1_1core_1_1_number_of_elements.html#a6cdf307348ba22b3dc8f90f1fb1e0757", null ], + [ "print", "classmlx_1_1core_1_1_number_of_elements.html#aecde30826970938f3aa688979a668f52", null ], + [ "state", "classmlx_1_1core_1_1_number_of_elements.html#afbfee716b4896e98bdf502ceab87ac09", null ], + [ "vmap", "classmlx_1_1core_1_1_number_of_elements.html#a977d83eae845b8bd8c0b98b48cb1c6c2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_pad-members.html b/docs/build/html/classmlx_1_1core_1_1_pad-members.html index 5c56d4d49..9fb73fb12 100644 --- a/docs/build/html/classmlx_1_1core_1_1_pad-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_pad-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Pad Member List
    @@ -106,24 +120,27 @@ $(function(){ initResizable(false); }); mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual - Pad(Stream stream, const std::vector< int > &axes, const std::vector< int > &low_pad_size, const std::vector< int > &high_pad_size)mlx::core::Padinlineexplicit + Pad(Stream stream, const std::vector< int > &axes, const Shape &low_pad_size, const Shape &high_pad_size)mlx::core::Padinlineexplicit Primitive(Stream stream)mlx::core::Primitiveinlineexplicit Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Padinlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Padvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Padvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Padinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Padvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Padvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_pad.html b/docs/build/html/classmlx_1_1core_1_1_pad.html index 1497128f7..c603d71d9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_pad.html +++ b/docs/build/html/classmlx_1_1core_1_1_pad.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Pad Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -109,8 +123,8 @@ Inheritance diagram for mlx::core::Pad:
    - - + + @@ -130,6 +144,8 @@ Public Member Functions + + @@ -158,7 +174,7 @@ Public Member Functions - + @@ -173,8 +189,8 @@ Public Member Functions

    Public Member Functions

     Pad (Stream stream, const std::vector< int > &axes, const std::vector< int > &low_pad_size, const std::vector< int > &high_pad_size)
     
     Pad (Stream stream, const std::vector< int > &axes, const Shape &low_pad_size, const Shape &high_pad_size)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     

    Constructor & Destructor Documentation

    - -

    ◆ Pad()

    + +

    ◆ Pad()

    @@ -195,17 +211,17 @@ Public Member Functions - const std::vector< int > & low_pad_size, + const Shape & low_pad_size, - const std::vector< int > & high_pad_size ) + const Shape & high_pad_size ) -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -360,7 +376,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +385,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Pad::state () const
    +
    +inline
    +
    +
    @@ -403,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +477,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +493,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_pad.js b/docs/build/html/classmlx_1_1core_1_1_pad.js new file mode 100644 index 000000000..e31cbb0fd --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_pad.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_pad = +[ + [ "Pad", "classmlx_1_1core_1_1_pad.html#aa55090a94f574c29678d841d091cdf44", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_pad.html#aaf82dd163cd536fbf97304f8b29080cb", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_pad.html#aefd4d3a5bd8b6b35b266c9e558ada153", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_pad.html#aad7c3bfecafe435d6a8e807de4c7ea9b", null ], + [ "jvp", "classmlx_1_1core_1_1_pad.html#a6e43a42032ef11497e8d91290574ec72", null ], + [ "print", "classmlx_1_1core_1_1_pad.html#af87754daaf51f6a6cf8bd4949ca1e70a", null ], + [ "state", "classmlx_1_1core_1_1_pad.html#a00a7cff2ae640f45b43f62cc25d6346c", null ], + [ "vjp", "classmlx_1_1core_1_1_pad.html#ad8a7e547644f2717a24322968e971038", null ], + [ "vmap", "classmlx_1_1core_1_1_pad.html#a85658812a0f3275ba3eb74b7c75686cf", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_partition-members.html b/docs/build/html/classmlx_1_1core_1_1_partition-members.html index 47532df95..201e39e4e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_partition-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_partition-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Partition Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Partitioninlinevirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Partitionvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Partitionvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Partitioninline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Partitionvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Partitionvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_partition.html b/docs/build/html/classmlx_1_1core_1_1_partition.html index 3c7715ab6..4d6c50687 100644 --- a/docs/build/html/classmlx_1_1core_1_1_partition.html +++ b/docs/build/html/classmlx_1_1core_1_1_partition.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Partition Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -200,7 +216,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -326,7 +342,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -347,7 +363,7 @@ Public Member Functions - + @@ -355,7 +371,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Partition::output_shapes std::vector< Shape > mlx::core::Partition::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -385,7 +401,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -394,6 +410,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Partition::state () const
    +
    +inline
    +
    +
    @@ -428,7 +469,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -461,7 +502,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -477,10 +518,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_partition.js b/docs/build/html/classmlx_1_1core_1_1_partition.js new file mode 100644 index 000000000..1849b01ca --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_partition.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_partition = +[ + [ "Partition", "classmlx_1_1core_1_1_partition.html#a7b82ca3895b6654308fac566b277ac0d", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_partition.html#a784596ab567f9f3cb4fe1a69466523d8", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_partition.html#a8eca1be21ae9ccfda46e6f3e85f506ef", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_partition.html#aabdf6ef4f2159b2bfe93e0e87d4772f8", null ], + [ "jvp", "classmlx_1_1core_1_1_partition.html#a310f569a163958940ed02cf52079746a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_partition.html#a5e62aa0109e53fb4acb861ef39787b4a", null ], + [ "print", "classmlx_1_1core_1_1_partition.html#ab5c7aa4fed325475b33d4004649f0dc0", null ], + [ "state", "classmlx_1_1core_1_1_partition.html#adde13e40924c016473864119465cad4b", null ], + [ "vjp", "classmlx_1_1core_1_1_partition.html#a7110772b6cd2d430a2b825cf5c952ca9", null ], + [ "vmap", "classmlx_1_1core_1_1_partition.html#aa0cc55e4d4d2cb5d129d32832321df2c", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_power-members.html b/docs/build/html/classmlx_1_1core_1_1_power-members.html index b24f7d182..519f333ad 100644 --- a/docs/build/html/classmlx_1_1core_1_1_power-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_power-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Power Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_power.html b/docs/build/html/classmlx_1_1core_1_1_power.html index f998a6261..51b30de9a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_power.html +++ b/docs/build/html/classmlx_1_1core_1_1_power.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Power Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Power::output_shapes std::vector< Shape > mlx::core::Power::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_power.js b/docs/build/html/classmlx_1_1core_1_1_power.js new file mode 100644 index 000000000..642b1ed99 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_power.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_power = +[ + [ "Power", "classmlx_1_1core_1_1_power.html#a7bc6c64179b7a2aef56fe1dafb6459b2", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_power.html#a6783da16fb6ff393aaa57737f1973206", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_power.html#a80577d4c0853c24027777c90a1ec7e11", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_power.html#a76b4ec9d1ff07f06189e414480453d68", null ], + [ "jvp", "classmlx_1_1core_1_1_power.html#a3e78b06453faa4fd149fd19c0e7a300a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_power.html#af23ed795bdcdc4c3f91f0d4c1bb1d928", null ], + [ "print", "classmlx_1_1core_1_1_power.html#a33e2d7ff078426fe66ea2370ceb5af60", null ], + [ "vjp", "classmlx_1_1core_1_1_power.html#a1453bb8307d6ff33134f1e00263bf082", null ], + [ "vmap", "classmlx_1_1core_1_1_power.html#a5e22749592413a9adbdc877b03b87c8f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_primitive-members.html b/docs/build/html/classmlx_1_1core_1_1_primitive-members.html index 75bb28941..c29138bc5 100644 --- a/docs/build/html/classmlx_1_1core_1_1_primitive-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_primitive-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Primitive Member List
    @@ -111,10 +125,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_primitive.html b/docs/build/html/classmlx_1_1core_1_1_primitive.html index 1c9b786bb..5c7ca54f2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_primitive.html +++ b/docs/build/html/classmlx_1_1core_1_1_primitive.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Primitive Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    -
    mlx::core::Primitive Class Referenceabstract
    +
    mlx::core::Primitive Class Referenceabstract
    @@ -147,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -180,7 +194,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -205,7 +219,7 @@ Public Member Functions -virtualdefault +virtualdefault
    @@ -230,7 +244,7 @@ Public Member Functions -delete +delete
    @@ -255,7 +269,7 @@ Public Member Functions -delete +delete
    @@ -281,7 +295,7 @@ Public Member Functions -inline +inline
    @@ -312,7 +326,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -346,7 +360,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -373,14 +387,14 @@ Public Member Functions -inlinevirtual +inlinevirtual

    Equivalence check defaults to false unless overridden by the primitive.

    -

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DivMod, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::fast::AffineQuantize, mlx::core::fast::ScaledDotProductAttention, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Uniform, and mlx::core::View.

    +

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::fast::AffineQuantize, mlx::core::fast::ScaledDotProductAttention, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Unflatten, and mlx::core::View.

    @@ -411,14 +425,14 @@ Public Member Functions -virtual +virtual

    The Jacobian-vector product.

    -

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, and mlx::core::Transpose.

    +

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, and mlx::core::Unflatten.

    @@ -440,7 +454,7 @@ Public Member Functions -delete +delete
    @@ -465,7 +479,7 @@ Public Member Functions -delete +delete
    @@ -482,7 +496,7 @@ Public Member Functions - + @@ -490,7 +504,7 @@ Public Member Functions
    virtual std::vector< Shape > mlx::core::Primitive::output_shapes virtual std::vector< Shape > mlx::core::Primitive::output_shapes ( const std::vector< array > & inputs)
    -virtual +virtual
    @@ -498,7 +512,7 @@ Public Member Functions

    Get the output shapes of the primitive.

    This is not required to be implemented by derived classes, in which case it will throw.

    -

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DivMod, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::fast::AffineQuantize, mlx::core::Floor, mlx::core::Gather, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Round, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, and mlx::core::Transpose.

    +

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::fast::AffineQuantize, mlx::core::Flatten, mlx::core::Floor, mlx::core::Gather, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, and mlx::core::Unflatten.

    @@ -520,14 +534,14 @@ Public Member Functions -pure virtual +pure virtual

    Print the primitive.

    -

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::Depends, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QRF, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::SVD, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Uniform, and mlx::core::View.

    +

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::Depends, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QRF, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::SVD, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Unflatten, and mlx::core::View.

    @@ -549,7 +563,7 @@ Public Member Functions -inline +inline
    @@ -590,14 +604,14 @@ Public Member Functions -virtual +virtual

    The vector-Jacobian product.

    -

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::Depends, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::fast::LayerNorm, mlx::core::fast::RMSNorm, mlx::core::fast::RoPE, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, and mlx::core::Transpose.

    +

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::Depends, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::fast::LayerNorm, mlx::core::fast::RMSNorm, mlx::core::fast::RoPE, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, and mlx::core::Unflatten.

    @@ -623,7 +637,7 @@ Public Member Functions -virtual +virtual
    @@ -631,7 +645,7 @@ Public Member Functions

    The primitive must know how to vectorize itself across the given axes.

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    -

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::distributed::Send, mlx::core::Divide, mlx::core::DivMod, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::SVD, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Uniform, and mlx::core::View.

    +

    Reimplemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Compiled, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::CustomTransforms, mlx::core::distributed::AllGather, mlx::core::distributed::AllReduce, mlx::core::distributed::Send, mlx::core::Divide, mlx::core::DivMod, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Eigh, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::fast::Custom, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Split, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::SVD, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Unflatten, and mlx::core::View.

    @@ -639,10 +653,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_primitive.js b/docs/build/html/classmlx_1_1core_1_1_primitive.js new file mode 100644 index 000000000..799ca61ee --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_primitive.js @@ -0,0 +1,19 @@ +var classmlx_1_1core_1_1_primitive = +[ + [ "Primitive", "classmlx_1_1core_1_1_primitive.html#afc69f22ee1f6e8a9ecc2c3a8f43b8fdb", null ], + [ "~Primitive", "classmlx_1_1core_1_1_primitive.html#a29f70eb2d3b7e6c5fe52779c03f03777", null ], + [ "Primitive", "classmlx_1_1core_1_1_primitive.html#a3349f745fae50ca7627f79a731a19e32", null ], + [ "Primitive", "classmlx_1_1core_1_1_primitive.html#a342da891b9882bdee9a0e0c1ac826eda", null ], + [ "device", "classmlx_1_1core_1_1_primitive.html#a8ae61e3289c4134232a69295268f8261", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_primitive.html#a1596dc50b910538eae14878e98f07575", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_primitive.html#ad217376dcf5eff691d731566faec2ba2", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_primitive.html#a6140a502af4c2bbbc776ab26e9afebcd", null ], + [ "jvp", "classmlx_1_1core_1_1_primitive.html#a9fecf38f53da08ba1947543c2b3158c2", null ], + [ "operator=", "classmlx_1_1core_1_1_primitive.html#a6b1be7ea92f3a7bb19875c70259dad6b", null ], + [ "operator=", "classmlx_1_1core_1_1_primitive.html#a50bbddd43e1ba0cf5f127cd7aa756a9e", null ], + [ "output_shapes", "classmlx_1_1core_1_1_primitive.html#aa5b443d71db1c7ed31a5ae6e31b7fe29", null ], + [ "print", "classmlx_1_1core_1_1_primitive.html#ae1aff91354ce036596088a3e19474ecb", null ], + [ "stream", "classmlx_1_1core_1_1_primitive.html#a46e6257397a662528f9f831842ac456a", null ], + [ "vjp", "classmlx_1_1core_1_1_primitive.html#a1dcb6807326eeab62474c6a0e3836d42", null ], + [ "vmap", "classmlx_1_1core_1_1_primitive.html#ac632b9619dd7a6a0f177bd36202e8103", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_q_r_f-members.html b/docs/build/html/classmlx_1_1core_1_1_q_r_f-members.html index 61ffc3c0c..6e68a5acb 100644 --- a/docs/build/html/classmlx_1_1core_1_1_q_r_f-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_q_r_f-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::QRF Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_q_r_f.html b/docs/build/html/classmlx_1_1core_1_1_q_r_f.html index 305e43098..8cb7c713d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_q_r_f.html +++ b/docs/build/html/classmlx_1_1core_1_1_q_r_f.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::QRF Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -139,7 +153,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -172,7 +186,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -202,7 +216,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -263,7 +277,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -278,10 +292,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_q_r_f.js b/docs/build/html/classmlx_1_1core_1_1_q_r_f.js new file mode 100644 index 000000000..3975a3c9b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_q_r_f.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1_q_r_f = +[ + [ "QRF", "classmlx_1_1core_1_1_q_r_f.html#a44ed2924dc574c4aeb79b1188b5c3983", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_q_r_f.html#a48493887395d65a27f04de1804d277d2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_q_r_f.html#ae5fa3482192f4713605cd07e7fc1c6c9", null ], + [ "print", "classmlx_1_1core_1_1_q_r_f.html#aba3526722b3a52b41fa8103b909f7f3b", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_quantized_matmul-members.html b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul-members.html index 2a9dcf5e9..0ce9a9461 100644 --- a/docs/build/html/classmlx_1_1core_1_1_quantized_matmul-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::QuantizedMatmul Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::QuantizedMatmulinlinevirtual QuantizedMatmul(Stream stream, int group_size, int bits, bool transpose)mlx::core::QuantizedMatmulinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::QuantizedMatmulvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::QuantizedMatmulvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::QuantizedMatmulinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::QuantizedMatmulvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::QuantizedMatmulvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.html b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.html index 4f158d206..38c4dca94 100644 --- a/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.html +++ b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::QuantizedMatmul Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,9 +144,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -205,7 +221,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -352,7 +368,7 @@ Public Member Functions - + @@ -360,7 +376,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::QuantizedMatmul::output_shapes std::vector< Shape > mlx::core::QuantizedMatmul::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -390,7 +406,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -399,6 +415,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::QuantizedMatmul::state () const
    +
    +inline
    +
    +
    @@ -433,7 +474,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -466,7 +507,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -482,10 +523,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.js b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.js new file mode 100644 index 000000000..fd029994f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_quantized_matmul.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_quantized_matmul = +[ + [ "QuantizedMatmul", "classmlx_1_1core_1_1_quantized_matmul.html#a5bd164d038d9dc21919f7e0bfdeaa25c", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_quantized_matmul.html#ab3dfa73b74d8f4f2e9ab4f0eb016b0e3", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_quantized_matmul.html#a2812ad007d695ed1aaf9cf706fb9c4b3", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_quantized_matmul.html#af28b36e3f40ea41785387800326cc8e1", null ], + [ "jvp", "classmlx_1_1core_1_1_quantized_matmul.html#ae51fdd0b81dd26c6687577567c126e23", null ], + [ "output_shapes", "classmlx_1_1core_1_1_quantized_matmul.html#a7d57a31d41c58e1bd88ffe9c6b0dbf52", null ], + [ "print", "classmlx_1_1core_1_1_quantized_matmul.html#aaef8c96d4d40b4fa08ced540d341a4db", null ], + [ "state", "classmlx_1_1core_1_1_quantized_matmul.html#ad83bfd32fda988c29e5ca277a84c0655", null ], + [ "vjp", "classmlx_1_1core_1_1_quantized_matmul.html#acb975e272b4a88ab232ef7f7c3a2bf26", null ], + [ "vmap", "classmlx_1_1core_1_1_quantized_matmul.html#a3434394140177b285f971c9ffe7e8763", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_random_bits-members.html b/docs/build/html/classmlx_1_1core_1_1_random_bits-members.html index 96ef570f6..90a1d0ee8 100644 --- a/docs/build/html/classmlx_1_1core_1_1_random_bits-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_random_bits-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::RandomBits Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::RandomBitsinlinevirtual RandomBits(Stream stream, const Shape &shape, int width)mlx::core::RandomBitsinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::RandomBitsvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::RandomBitsinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::RandomBitsvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_random_bits.html b/docs/build/html/classmlx_1_1core_1_1_random_bits.html index 44356a2d6..7d6872c58 100644 --- a/docs/build/html/classmlx_1_1core_1_1_random_bits.html +++ b/docs/build/html/classmlx_1_1core_1_1_random_bits.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::RandomBits Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -109,7 +123,7 @@ Inheritance diagram for mlx::core::RandomBits:
    - + @@ -124,6 +138,8 @@ Public Member Functions + + @@ -158,7 +174,7 @@ Public Member Functions - + @@ -190,7 +206,7 @@ Public Member Functions - + @@ -200,7 +216,7 @@ Public Member Functions

    Public Member Functions

     RandomBits (Stream stream, const Shape &shape, int width)
     RandomBits (Stream stream, const Shape &shape, int width)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::pair< std::vector< int >, int > state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    virtual std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)
     The vector-Jacobian product.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
    const Shape & shape, const Shape & shape,
    -inlineexplicit +inlineexplicit
    @@ -230,7 +246,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +277,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -288,7 +304,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -317,7 +333,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -326,6 +342,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< std::vector< int >, int > mlx::core::RandomBits::state () const
    +
    +inline
    +
    +
    @@ -350,7 +391,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -366,10 +407,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_random_bits.js b/docs/build/html/classmlx_1_1core_1_1_random_bits.js new file mode 100644 index 000000000..b95d0729a --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_random_bits.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_random_bits = +[ + [ "RandomBits", "classmlx_1_1core_1_1_random_bits.html#acd79c5ea2d67132c98d00fa927f08e26", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_random_bits.html#a5752d051cd16cf5f8d4754c0a656f0d2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_random_bits.html#a578756866665358577418e4cdd94aa3a", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_random_bits.html#a72ec915debf5823e7c0463045b2894e6", null ], + [ "print", "classmlx_1_1core_1_1_random_bits.html#a8a5593c34fd868d94b36a8ced1390271", null ], + [ "state", "classmlx_1_1core_1_1_random_bits.html#a75a34d7541a1c124710dc4d0ec2dfa60", null ], + [ "vmap", "classmlx_1_1core_1_1_random_bits.html#a0dc12f053c6492f934bc18031412c415", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_real-members.html b/docs/build/html/classmlx_1_1core_1_1_real-members.html index 292ea563e..3ed9631a3 100644 --- a/docs/build/html/classmlx_1_1core_1_1_real-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_real-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Real Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_real.html b/docs/build/html/classmlx_1_1core_1_1_real.html index 80bc40945..ca28dd652 100644 --- a/docs/build/html/classmlx_1_1core_1_1_real.html +++ b/docs/build/html/classmlx_1_1core_1_1_real.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Real Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Real::output_shapes std::vector< Shape > mlx::core::Real::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_real.js b/docs/build/html/classmlx_1_1core_1_1_real.js new file mode 100644 index 000000000..f2594561b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_real.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_real = +[ + [ "Real", "classmlx_1_1core_1_1_real.html#acd4480e3f0834d70ff6b5f1ecef17892", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_real.html#a365d046caac91b521f0f5a5518037934", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_real.html#a1e209e88a43bdd1eea43ad0b03f9a7f2", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_real.html#a6d9bed396862a9e9d6abfbdcd8d8d239", null ], + [ "jvp", "classmlx_1_1core_1_1_real.html#adff418a54970e2344bd3c2885aae5526", null ], + [ "output_shapes", "classmlx_1_1core_1_1_real.html#a75999bd0b97d97a5675b9cdbab27dcff", null ], + [ "print", "classmlx_1_1core_1_1_real.html#a740a0dfb54c2a4467a0a59f11fe69e1b", null ], + [ "vjp", "classmlx_1_1core_1_1_real.html#a29f6109339c5141a862ceae72c8b80fe", null ], + [ "vmap", "classmlx_1_1core_1_1_real.html#a07fbbefb6a1bc1ebd3985b24c36693b6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_reduce-members.html b/docs/build/html/classmlx_1_1core_1_1_reduce-members.html index ab8f9908c..59ee3c991 100644 --- a/docs/build/html/classmlx_1_1core_1_1_reduce-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_reduce-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Reduce Member List
    @@ -117,20 +131,23 @@ $(function(){ initResizable(false); }); Prod enum valuemlx::core::Reduce Reduce(Stream stream, ReduceType reduce_type, const std::vector< int > &axes)mlx::core::Reduceinlineexplicit ReduceType enum namemlx::core::Reduce - stream()mlx::core::Primitiveinline - Sum enum valuemlx::core::Reduce - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Reducevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Reducevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Reduceinline + stream()mlx::core::Primitiveinline + Sum enum valuemlx::core::Reduce + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Reducevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Reducevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_reduce.html b/docs/build/html/classmlx_1_1core_1_1_reduce.html index 89103f3cf..c3b8b8f93 100644 --- a/docs/build/html/classmlx_1_1core_1_1_reduce.html +++ b/docs/build/html/classmlx_1_1core_1_1_reduce.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Reduce Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Types | @@ -136,7 +150,7 @@ Public Member Functions std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override  The vector-Jacobian product.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      void print (std::ostream &os) override @@ -145,6 +159,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +std::pair< ReduceType, std::vector< int > > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -238,7 +254,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -268,7 +284,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -299,7 +315,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -326,7 +342,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -347,7 +363,7 @@ Public Member Functions - + @@ -355,7 +371,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Reduce::output_shapes std::vector< Shape > mlx::core::Reduce::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -385,7 +401,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -394,6 +410,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< ReduceType, std::vector< int > > mlx::core::Reduce::state () const
    +
    +inline
    +
    +
    @@ -428,7 +469,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -461,7 +502,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -477,10 +518,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_reduce.js b/docs/build/html/classmlx_1_1core_1_1_reduce.js new file mode 100644 index 000000000..b8e9dd536 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_reduce.js @@ -0,0 +1,20 @@ +var classmlx_1_1core_1_1_reduce = +[ + [ "ReduceType", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9", [ + [ "And", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a5cc3412a1f243dcb11661bca42daea93", null ], + [ "Or", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a2e53e38f8b906ed4def9a5653aeb51fe", null ], + [ "Sum", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a8582875544f1d3d396a1a376473ef1dd", null ], + [ "Prod", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9ac5b077bfec55fe2b141b197dfa00ecf7", null ], + [ "Min", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a0d3d1f5c94725bdc42fa692e2c074418", null ], + [ "Max", "classmlx_1_1core_1_1_reduce.html#a0848518b16ae6d4043d6be247bdf31c9a3d11c500ea4f7f639e20dd0755d39260", null ] + ] ], + [ "Reduce", "classmlx_1_1core_1_1_reduce.html#a055368c1d036fb953a23ef230e33dcbf", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_reduce.html#aeb8a58b560c0a09ae3a695df7829acfa", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_reduce.html#ae9caaf42edadfe73ea208d98f526890f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_reduce.html#abe8f3327d617d0dd7438f066497ae08e", null ], + [ "output_shapes", "classmlx_1_1core_1_1_reduce.html#aaf3da1c98cdf530803118b382c5f58bc", null ], + [ "print", "classmlx_1_1core_1_1_reduce.html#a399be3a89553787a0a687706881f03cd", null ], + [ "state", "classmlx_1_1core_1_1_reduce.html#afca1398c042a3b1ca9a9a2e40fe62367", null ], + [ "vjp", "classmlx_1_1core_1_1_reduce.html#a684883d2a96315f548ca769510e28e4e", null ], + [ "vmap", "classmlx_1_1core_1_1_reduce.html#abab1b5aa01ccad44f213f510c3596b38", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_remainder-members.html b/docs/build/html/classmlx_1_1core_1_1_remainder-members.html index 0f4e998d3..d3e7833ba 100644 --- a/docs/build/html/classmlx_1_1core_1_1_remainder-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_remainder-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Remainder Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_remainder.html b/docs/build/html/classmlx_1_1core_1_1_remainder.html index 300ebb9a6..9587c539f 100644 --- a/docs/build/html/classmlx_1_1core_1_1_remainder.html +++ b/docs/build/html/classmlx_1_1core_1_1_remainder.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Remainder Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Remainder::output_shapes std::vector< Shape > mlx::core::Remainder::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_remainder.js b/docs/build/html/classmlx_1_1core_1_1_remainder.js new file mode 100644 index 000000000..bd0959b9b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_remainder.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_remainder = +[ + [ "Remainder", "classmlx_1_1core_1_1_remainder.html#a4f3eada4a21898af4a77d1d27ce14641", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_remainder.html#ac6c6c86a0bf02e6e529eb87f6e617ccc", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_remainder.html#a7919ea9b84e42522d51bf0d5a396e161", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_remainder.html#a802039faaa2ed7b763ec3d7debcce814", null ], + [ "jvp", "classmlx_1_1core_1_1_remainder.html#a972002173fc00ee86029d12bf1a9ba79", null ], + [ "output_shapes", "classmlx_1_1core_1_1_remainder.html#ab4de49818d1fdea8cdfef502f519b255", null ], + [ "print", "classmlx_1_1core_1_1_remainder.html#aeaecac5ea8e606d7ecd393d8019029e4", null ], + [ "vjp", "classmlx_1_1core_1_1_remainder.html#ab18f7bca1027ae71847a50da0933cec6", null ], + [ "vmap", "classmlx_1_1core_1_1_remainder.html#a79867e1099a2e3c2d3e87407b2ab6e3d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_reshape-members.html b/docs/build/html/classmlx_1_1core_1_1_reshape-members.html index b33864bd7..43e8b9fb0 100644 --- a/docs/build/html/classmlx_1_1core_1_1_reshape-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_reshape-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Reshape Member List
    @@ -105,12 +119,14 @@ $(function(){ initResizable(false); }); operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive - output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual - Primitive(Stream stream)mlx::core::Primitiveinlineexplicit - Primitive(const Primitive &other)=deletemlx::core::Primitive - Primitive(Primitive &&other)=deletemlx::core::Primitive - print(std::ostream &os) overridemlx::core::Reshapeinlinevirtual - Reshape(Stream stream, const Shape &shape)mlx::core::Reshapeinlineexplicit + output_shape(const array &input, Shape shape)mlx::core::Reshapestatic + output_shapes(const std::vector< array > &inputs) overridemlx::core::Reshapevirtual + Primitive(Stream stream)mlx::core::Primitiveinlineexplicit + Primitive(const Primitive &other)=deletemlx::core::Primitive + Primitive(Primitive &&other)=deletemlx::core::Primitive + print(std::ostream &os) overridemlx::core::Reshapeinlinevirtual + Reshape(Stream stream, const Shape &shape)mlx::core::Reshapeinlineexplicit + state() constmlx::core::Reshapeinline stream()mlx::core::Primitiveinline UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive @@ -120,10 +136,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_reshape.html b/docs/build/html/classmlx_1_1core_1_1_reshape.html index 78e332e23..bdb166807 100644 --- a/docs/build/html/classmlx_1_1core_1_1_reshape.html +++ b/docs/build/html/classmlx_1_1core_1_1_reshape.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Reshape Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    @@ -109,7 +124,7 @@ Inheritance diagram for mlx::core::Reshape:
    - + @@ -130,6 +145,11 @@ Public Member Functions + + + + + @@ -158,9 +178,6 @@ Public Member Functions - - - @@ -171,6 +188,11 @@ Public Member Functions +

    Public Member Functions

     Reshape (Stream stream, const Shape &shape)
     Reshape (Stream stream, const Shape &shape)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< int > state () const
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + +

    +Static Public Member Functions

    static Shape output_shape (const array &input, Shape shape)
     

    Constructor & Destructor Documentation

    @@ -190,12 +212,12 @@ Public Member Functions - const Shape & shape ) + const Shape & shape ) -inlineexplicit +inlineexplicit
    @@ -225,7 +247,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +278,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +305,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +343,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -330,6 +352,65 @@ Public Member Functions

    Reimplemented from mlx::core::Primitive.

    +
    + + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static Shape mlx::core::Reshape::output_shape (const array & input,
    Shape shape )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::Reshape::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    +
    @@ -350,7 +431,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -359,6 +440,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    + + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< int > mlx::core::Reshape::state () const
    +
    +inline
    +
    +
    @@ -393,7 +499,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -426,7 +532,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -442,10 +548,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_reshape.js b/docs/build/html/classmlx_1_1core_1_1_reshape.js new file mode 100644 index 000000000..3ff5aa6df --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_reshape.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_reshape = +[ + [ "Reshape", "classmlx_1_1core_1_1_reshape.html#aa5a5d520b6ec6c8d9ba9d79808e36312", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_reshape.html#a658de2c5f710991b48e14b2bd19b229f", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_reshape.html#aa1e85f28471875750c47351520b56059", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_reshape.html#abd07c53af476777a04307e0423784cf3", null ], + [ "jvp", "classmlx_1_1core_1_1_reshape.html#ab8fc28748991017cc3e29f93c91087a5", null ], + [ "output_shape", "classmlx_1_1core_1_1_reshape.html#aa15020d7d844d714d42bc60b44aeefc1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_reshape.html#aed3a83606d6917b2c344607101a2c43d", null ], + [ "print", "classmlx_1_1core_1_1_reshape.html#a0f2323d5d67ece0eb25ecff565b21862", null ], + [ "state", "classmlx_1_1core_1_1_reshape.html#aa8ad5958aac8723dd6ce49820eaba029", null ], + [ "vjp", "classmlx_1_1core_1_1_reshape.html#ab17294ecc6b5d4e89626fb48c7516365", null ], + [ "vmap", "classmlx_1_1core_1_1_reshape.html#ae239dd3c6cab147e4af572dc58204f9d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_round-members.html b/docs/build/html/classmlx_1_1core_1_1_round-members.html index b4769bbf0..0a9ecbc32 100644 --- a/docs/build/html/classmlx_1_1core_1_1_round-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_round-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Round Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_round.html b/docs/build/html/classmlx_1_1core_1_1_round.html index 18f0b0290..bcc41ee9a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_round.html +++ b/docs/build/html/classmlx_1_1core_1_1_round.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Round Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Round::output_shapes std::vector< Shape > mlx::core::Round::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_round.js b/docs/build/html/classmlx_1_1core_1_1_round.js new file mode 100644 index 000000000..8dcf76bb0 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_round.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_round = +[ + [ "Round", "classmlx_1_1core_1_1_round.html#a1327a359b2aed91f576145a0e70d1dde", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_round.html#ad066b0944b437f64ab546025efa00007", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_round.html#af7fe5ff8f3db166c203b4be4b07f13ec", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_round.html#aeb3d8607bbba7345a3142d4cbd4e6927", null ], + [ "jvp", "classmlx_1_1core_1_1_round.html#a032075a7d0dde2dba6189636d216c5e7", null ], + [ "output_shapes", "classmlx_1_1core_1_1_round.html#a61821399e177e142723fc986e437d459", null ], + [ "print", "classmlx_1_1core_1_1_round.html#af0dfe8943109c936b35ab0082f566f72", null ], + [ "vjp", "classmlx_1_1core_1_1_round.html#af8f085e08b7fa8840c52a20b12ca35ce", null ], + [ "vmap", "classmlx_1_1core_1_1_round.html#a6fad8799a7982e1ccbe05be7cc38a7fd", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_s_v_d-members.html b/docs/build/html/classmlx_1_1core_1_1_s_v_d-members.html index 801c6d5bf..d1b65e819 100644 --- a/docs/build/html/classmlx_1_1core_1_1_s_v_d-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_s_v_d-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::SVD Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::SVDvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_s_v_d.html b/docs/build/html/classmlx_1_1core_1_1_s_v_d.html index fb2a5246d..538633a2d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_s_v_d.html +++ b/docs/build/html/classmlx_1_1core_1_1_s_v_d.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::SVD Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -139,7 +153,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -172,7 +186,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -202,7 +216,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -263,7 +277,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -296,7 +310,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -312,10 +326,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_s_v_d.js b/docs/build/html/classmlx_1_1core_1_1_s_v_d.js new file mode 100644 index 000000000..4411e0093 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_s_v_d.js @@ -0,0 +1,8 @@ +var classmlx_1_1core_1_1_s_v_d = +[ + [ "SVD", "classmlx_1_1core_1_1_s_v_d.html#ae89ff583e34fa894cccb8e7a475ee6d1", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_s_v_d.html#a637f5c39fa8b10722c04a066f6c1ada6", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_s_v_d.html#a7067b2207f826a25549d571856b94e83", null ], + [ "print", "classmlx_1_1core_1_1_s_v_d.html#ab87a4e7ef857936bea66ba9e24662f53", null ], + [ "vmap", "classmlx_1_1core_1_1_s_v_d.html#a0366c958f6cdac8d1d9e1a4eda53fae8", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_scan-members.html b/docs/build/html/classmlx_1_1core_1_1_scan-members.html index 76d2c4bef..7cdff1264 100644 --- a/docs/build/html/classmlx_1_1core_1_1_scan-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_scan-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Scan Member List
    @@ -115,20 +129,23 @@ $(function(){ initResizable(false); }); Prod enum valuemlx::core::Scan ReduceType enum namemlx::core::Scan Scan(Stream stream, ReduceType reduce_type, int axis, bool reverse, bool inclusive)mlx::core::Scaninlineexplicit - stream()mlx::core::Primitiveinline - Sum enum valuemlx::core::Scan - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Scanvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Scanvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Scaninline + stream()mlx::core::Primitiveinline + Sum enum valuemlx::core::Scan + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Scanvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Scanvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_scan.html b/docs/build/html/classmlx_1_1core_1_1_scan.html index 6e6d0ac4a..afb4c8527 100644 --- a/docs/build/html/classmlx_1_1core_1_1_scan.html +++ b/docs/build/html/classmlx_1_1core_1_1_scan.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Scan Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Types | @@ -140,6 +154,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -168,7 +184,7 @@ Public Member Functions const Streamstream ()  The stream the primitive will run on.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -241,7 +257,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -271,7 +287,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -302,7 +318,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -329,7 +345,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -367,7 +383,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -396,7 +412,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -405,6 +421,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Scan::state () const
    +
    +inline
    +
    +
    @@ -439,7 +480,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,7 +513,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -488,10 +529,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_scan.js b/docs/build/html/classmlx_1_1core_1_1_scan.js new file mode 100644 index 000000000..87a68d6d3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_scan.js @@ -0,0 +1,18 @@ +var classmlx_1_1core_1_1_scan = +[ + [ "ReduceType", "classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1", [ + [ "Max", "classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1ad54b2905015a390708f79bae6cdac56d", null ], + [ "Min", "classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1a7d2ee8f14f2e70a9d47170fecc6da898", null ], + [ "Sum", "classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1ade23893033e4849f5596e7ce76a5fc36", null ], + [ "Prod", "classmlx_1_1core_1_1_scan.html#a47bf2ec54ead4b8f00f9f188518630f1a33edce755ed1a74632c302ad93a14789", null ] + ] ], + [ "Scan", "classmlx_1_1core_1_1_scan.html#ac93e8f9c6771de825d2186ef34fa7087", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_scan.html#a15676d9fd066e935782a923fba3e940b", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_scan.html#aef22c6fc2b2cb2a907cd8965c7413dde", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_scan.html#a54445a4d677ca4fe2a58d08eb5223ac6", null ], + [ "jvp", "classmlx_1_1core_1_1_scan.html#a6f9c862f4fbc7eaf430a361cdd8933ee", null ], + [ "print", "classmlx_1_1core_1_1_scan.html#ad5b6308c79e9b985a49df35eadd15b22", null ], + [ "state", "classmlx_1_1core_1_1_scan.html#a7249ca4c3316b1b1248df32c71fee0ea", null ], + [ "vjp", "classmlx_1_1core_1_1_scan.html#aaf13f72620b4b5d6a20e1228930e848e", null ], + [ "vmap", "classmlx_1_1core_1_1_scan.html#a297c7cc89c9bf9d186ebdebb634c7804", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_scatter-members.html b/docs/build/html/classmlx_1_1core_1_1_scatter-members.html index 219a54b35..8ac89e065 100644 --- a/docs/build/html/classmlx_1_1core_1_1_scatter-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_scatter-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Scatter Member List
    @@ -116,20 +130,23 @@ $(function(){ initResizable(false); }); Prod enum valuemlx::core::Scatter ReduceType enum namemlx::core::Scatter Scatter(Stream stream, ReduceType reduce_type, const std::vector< int > &axes)mlx::core::Scatterinlineexplicit - stream()mlx::core::Primitiveinline - Sum enum valuemlx::core::Scatter - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Scattervirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Scattervirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Scatterinline + stream()mlx::core::Primitiveinline + Sum enum valuemlx::core::Scatter + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Scattervirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Scattervirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_scatter.html b/docs/build/html/classmlx_1_1core_1_1_scatter.html index 4ac1f0e21..f21234476 100644 --- a/docs/build/html/classmlx_1_1core_1_1_scatter.html +++ b/docs/build/html/classmlx_1_1core_1_1_scatter.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Scatter Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Types | @@ -144,6 +158,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +std::pair< ReduceType, std::vector< int > > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -172,7 +188,7 @@ Public Member Functions const Streamstream ()  The stream the primitive will run on.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -236,7 +252,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -297,7 +313,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -324,7 +340,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -362,7 +378,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -391,7 +407,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -400,6 +416,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< ReduceType, std::vector< int > > mlx::core::Scatter::state () const
    +
    +inline
    +
    +
    @@ -434,7 +475,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -467,7 +508,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -483,10 +524,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_scatter.js b/docs/build/html/classmlx_1_1core_1_1_scatter.js new file mode 100644 index 000000000..e391de767 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_scatter.js @@ -0,0 +1,19 @@ +var classmlx_1_1core_1_1_scatter = +[ + [ "ReduceType", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613c", [ + [ "Max", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca1c2da7b96d743296fe660f5fc4072f16", null ], + [ "Min", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613cad914e4c3475ce9858f2de4bf35dcfdbf", null ], + [ "Sum", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca14abe2d8818efa71726be4e156813d6f", null ], + [ "Prod", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca5e43e8ffd1f5ba49826e2e7ac3450466", null ], + [ "None", "classmlx_1_1core_1_1_scatter.html#a614d19af11dc30644b2b4941033b613ca87a6a1927de175b71d7d0b5c11b8665c", null ] + ] ], + [ "Scatter", "classmlx_1_1core_1_1_scatter.html#ac9b3eff67389ef9aa820753379ffeaa3", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_scatter.html#a7623f590f8b77167b5ebb4f14bc9dc97", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_scatter.html#ab304345db3d8cfeea15e27461ae2e678", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_scatter.html#a0208172562abdc90472e6eb5f84c987f", null ], + [ "jvp", "classmlx_1_1core_1_1_scatter.html#a270fa8ccf36ce4bbbc23875139223934", null ], + [ "print", "classmlx_1_1core_1_1_scatter.html#aa9d45cbfb27b814517f6016092b30efa", null ], + [ "state", "classmlx_1_1core_1_1_scatter.html#a50a65033dc2a1cc84bf529ba718c9c60", null ], + [ "vjp", "classmlx_1_1core_1_1_scatter.html#a0b51287fba789bb139ed61d40a0c636a", null ], + [ "vmap", "classmlx_1_1core_1_1_scatter.html#a696c38b373a7a7c71bc112bd1117e322", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_select-members.html b/docs/build/html/classmlx_1_1core_1_1_select-members.html index 0ed101f42..d4ebe34a4 100644 --- a/docs/build/html/classmlx_1_1core_1_1_select-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_select-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Select Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_select.html b/docs/build/html/classmlx_1_1core_1_1_select.html index e956423f4..7d014fae9 100644 --- a/docs/build/html/classmlx_1_1core_1_1_select.html +++ b/docs/build/html/classmlx_1_1core_1_1_select.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Select Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Select::output_shapes std::vector< Shape > mlx::core::Select::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_select.js b/docs/build/html/classmlx_1_1core_1_1_select.js new file mode 100644 index 000000000..19079523f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_select.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_select = +[ + [ "Select", "classmlx_1_1core_1_1_select.html#a6f833fe55dd68ad3726bbf9a8f75eec9", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_select.html#aa51aa36e0adbd69e0d23d7c7adf88de2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_select.html#a2a82b6cba4c386b2b87f225a4b08ea9b", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_select.html#afc3c333fac7f902c98839921ef2874c8", null ], + [ "jvp", "classmlx_1_1core_1_1_select.html#a172df6812c2ea3e9d3c3fc5d527548d6", null ], + [ "output_shapes", "classmlx_1_1core_1_1_select.html#a10e837a391542b364186288a87e11513", null ], + [ "print", "classmlx_1_1core_1_1_select.html#a678285f2c0b9dae85692399c3aa692a7", null ], + [ "vjp", "classmlx_1_1core_1_1_select.html#a9b522487b78fceeca7f827cd1c29a9a3", null ], + [ "vmap", "classmlx_1_1core_1_1_select.html#a84e80361c8cf02536b4b98098793550f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sigmoid-members.html b/docs/build/html/classmlx_1_1core_1_1_sigmoid-members.html index a77284f7d..15f64b850 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sigmoid-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sigmoid-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sigmoid Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sigmoid.html b/docs/build/html/classmlx_1_1core_1_1_sigmoid.html index a94b87126..aff0da79a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sigmoid.html +++ b/docs/build/html/classmlx_1_1core_1_1_sigmoid.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sigmoid Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sigmoid::output_shapes std::vector< Shape > mlx::core::Sigmoid::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sigmoid.js b/docs/build/html/classmlx_1_1core_1_1_sigmoid.js new file mode 100644 index 000000000..45ef84dac --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sigmoid.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_sigmoid = +[ + [ "Sigmoid", "classmlx_1_1core_1_1_sigmoid.html#a47eca99113ec19f0eb60b6a0472c592b", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sigmoid.html#aa930ce05734cca529ebcb8d0ca8e1255", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sigmoid.html#a7a6bd0222d51d7f25f2719a91ccdfeca", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sigmoid.html#a04814ba1b0edf8299d5ca1bcb8749d8e", null ], + [ "jvp", "classmlx_1_1core_1_1_sigmoid.html#a62ca1c440896e32958c77af3340847db", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sigmoid.html#aff024a3309584724c9842f172a4e440b", null ], + [ "print", "classmlx_1_1core_1_1_sigmoid.html#ad4cd19938e5159754aa7516f405580c2", null ], + [ "vjp", "classmlx_1_1core_1_1_sigmoid.html#aac2f56a4c8362e36a28e232758ca52cf", null ], + [ "vmap", "classmlx_1_1core_1_1_sigmoid.html#a12712c23037e38192cbccd2d4b14cc85", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sign-members.html b/docs/build/html/classmlx_1_1core_1_1_sign-members.html index fc123c1f1..57ea0135e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sign-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sign-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sign Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sign.html b/docs/build/html/classmlx_1_1core_1_1_sign.html index 48ab7a6ef..2469d71e1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sign.html +++ b/docs/build/html/classmlx_1_1core_1_1_sign.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sign Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sign::output_shapes std::vector< Shape > mlx::core::Sign::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sign.js b/docs/build/html/classmlx_1_1core_1_1_sign.js new file mode 100644 index 000000000..4f3c8ac2f --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sign.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_sign = +[ + [ "Sign", "classmlx_1_1core_1_1_sign.html#afe951e50907bc23a601ec5fa9eae5763", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sign.html#a7498ec993b66879be30c5d9762c45a97", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sign.html#afa2b48b99a194106006b44af69ffda8b", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sign.html#a8c0934acbcc4b146e5aacd35a8c445bb", null ], + [ "jvp", "classmlx_1_1core_1_1_sign.html#a957992c7aa0e86cf06f861a94372086b", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sign.html#a2260f2e8e081010192eb8a6f90acde6e", null ], + [ "print", "classmlx_1_1core_1_1_sign.html#a2aa0720fe0a6d2408eb43c25d3d45b0a", null ], + [ "vjp", "classmlx_1_1core_1_1_sign.html#aa60ac52edd739fbdf388a997acd01bce", null ], + [ "vmap", "classmlx_1_1core_1_1_sign.html#aa7296045907015b4e0ae8a93e5e6e295", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sin-members.html b/docs/build/html/classmlx_1_1core_1_1_sin-members.html index d48713e3e..6f0b2e129 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sin-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sin-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sin Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sin.html b/docs/build/html/classmlx_1_1core_1_1_sin.html index 8e8fb2776..0c8f187d1 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sin.html +++ b/docs/build/html/classmlx_1_1core_1_1_sin.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sin Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sin::output_shapes std::vector< Shape > mlx::core::Sin::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sin.js b/docs/build/html/classmlx_1_1core_1_1_sin.js new file mode 100644 index 000000000..fbbfaac6e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sin.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_sin = +[ + [ "Sin", "classmlx_1_1core_1_1_sin.html#a10d1ecc0ca96e79cdf55b57073d126ea", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sin.html#ab34f9cebc2aed55a0b6ab4c991f02eb5", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sin.html#a6b59f1156cf8bdad8d45acd1d825cb5e", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sin.html#af00b0e5516f884996ce7a97e6c1e3e6a", null ], + [ "jvp", "classmlx_1_1core_1_1_sin.html#af662d10180967399820496477ff050de", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sin.html#abdd433ecbb54898161b43aa9e14ec7f1", null ], + [ "print", "classmlx_1_1core_1_1_sin.html#a73b31005551015897f15c00e8b0222e4", null ], + [ "vjp", "classmlx_1_1core_1_1_sin.html#aedefe550ab4b0687858981bc0bcfbfa0", null ], + [ "vmap", "classmlx_1_1core_1_1_sin.html#a45533996f3d72d9dd97d4c61cd684fba", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sinh-members.html b/docs/build/html/classmlx_1_1core_1_1_sinh-members.html index 8e10feb48..a64771ef2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sinh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sinh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sinh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sinh.html b/docs/build/html/classmlx_1_1core_1_1_sinh.html index 8e73177b7..03c062e7b 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sinh.html +++ b/docs/build/html/classmlx_1_1core_1_1_sinh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sinh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sinh::output_shapes std::vector< Shape > mlx::core::Sinh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sinh.js b/docs/build/html/classmlx_1_1core_1_1_sinh.js new file mode 100644 index 000000000..521f4630b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sinh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_sinh = +[ + [ "Sinh", "classmlx_1_1core_1_1_sinh.html#a4a4f6814d403c2ce5d6c574b0dca3c96", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sinh.html#ab6d5f6f40d177f6435f6a51c71b939dd", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sinh.html#a5a1af2399f166d5b228b5e83a1837c75", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sinh.html#adcb1878996fd4902cd550042dd6ad70d", null ], + [ "jvp", "classmlx_1_1core_1_1_sinh.html#a86e2b37823daf20a4c74c9f273215f9c", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sinh.html#ae04d8f6175c691a8f0d2a9fdd15af0ad", null ], + [ "print", "classmlx_1_1core_1_1_sinh.html#a5b4753d52e80799d4fea0b9172d25a77", null ], + [ "vjp", "classmlx_1_1core_1_1_sinh.html#a6b39fdd429bbb4de389e7c904fd561f0", null ], + [ "vmap", "classmlx_1_1core_1_1_sinh.html#ae171df22bc34c32e31b8135dc4caa788", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_slice-members.html b/docs/build/html/classmlx_1_1core_1_1_slice-members.html index 66386048f..73464991d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_slice-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_slice-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Slice Member List
    @@ -110,20 +124,23 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Sliceinlinevirtual - Slice(Stream stream, const std::vector< int > &start_indices, const std::vector< int > &end_indices, const std::vector< int > &strides)mlx::core::Sliceinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Slicevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Slicevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + Slice(Stream stream, const Shape &start_indices, const Shape &end_indices, const Shape &strides)mlx::core::Sliceinlineexplicit + state() constmlx::core::Sliceinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Slicevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Slicevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_slice.html b/docs/build/html/classmlx_1_1core_1_1_slice.html index 995205fb5..4a5abb10d 100644 --- a/docs/build/html/classmlx_1_1core_1_1_slice.html +++ b/docs/build/html/classmlx_1_1core_1_1_slice.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Slice Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -109,8 +123,8 @@ Inheritance diagram for mlx::core::Slice:
    - - + + @@ -130,6 +144,8 @@ Public Member Functions + + @@ -158,7 +174,7 @@ Public Member Functions - + @@ -173,8 +189,8 @@ Public Member Functions

    Public Member Functions

     Slice (Stream stream, const std::vector< int > &start_indices, const std::vector< int > &end_indices, const std::vector< int > &strides)
     
     Slice (Stream stream, const Shape &start_indices, const Shape &end_indices, const Shape &strides)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     

    Constructor & Destructor Documentation

    - -

    ◆ Slice()

    + +

    ◆ Slice()

    @@ -190,22 +206,22 @@ Public Member Functions - const std::vector< int > & start_indices, + const Shape & start_indices, - const std::vector< int > & end_indices, + const Shape & end_indices, - const std::vector< int > & strides ) + const Shape & strides ) -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -360,7 +376,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +385,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Slice::state () const
    +
    +inline
    +
    +
    @@ -403,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +477,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +493,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_slice.js b/docs/build/html/classmlx_1_1core_1_1_slice.js new file mode 100644 index 000000000..c225bffe6 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_slice.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_slice = +[ + [ "Slice", "classmlx_1_1core_1_1_slice.html#a3aa025acbf4a9ca9e030a1e6bda102f7", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_slice.html#a4b13503f5b2f5c6a90d394b020f9b3f2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_slice.html#aa53c21ff06a7c659e889af6b97d10a4a", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_slice.html#a43202c3b8966ae1db9ab82072e4918b0", null ], + [ "jvp", "classmlx_1_1core_1_1_slice.html#a8288324045ab21d6c97b1695ce86ef36", null ], + [ "print", "classmlx_1_1core_1_1_slice.html#a50851148948d924b71817cfbd4401504", null ], + [ "state", "classmlx_1_1core_1_1_slice.html#a069dafc62bf71e3ebc0bd99d96ec23be", null ], + [ "vjp", "classmlx_1_1core_1_1_slice.html#a291746a527ff991b66249fb2b54b685f", null ], + [ "vmap", "classmlx_1_1core_1_1_slice.html#ae33583b0db22fcfeae34dfe1c0e3eaa2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_slice_update-members.html b/docs/build/html/classmlx_1_1core_1_1_slice_update-members.html index 7e1c8ac74..cdd769667 100644 --- a/docs/build/html/classmlx_1_1core_1_1_slice_update-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_slice_update-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::SliceUpdate Member List
    @@ -105,25 +119,28 @@ $(function(){ initResizable(false); }); operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive - output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual + output_shapes(const std::vector< array > &inputs) overridemlx::core::SliceUpdateinlinevirtual Primitive(Stream stream)mlx::core::Primitiveinlineexplicit Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::SliceUpdateinlinevirtual - SliceUpdate(Stream stream, const std::vector< int > &start_indices, const std::vector< int > &end_indices, const std::vector< int > &strides)mlx::core::SliceUpdateinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::SliceUpdatevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::SliceUpdatevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + SliceUpdate(Stream stream, const Shape &start_indices, const Shape &end_indices, const Shape &strides)mlx::core::SliceUpdateinlineexplicit + state() constmlx::core::SliceUpdateinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::SliceUpdatevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::SliceUpdatevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_slice_update.html b/docs/build/html/classmlx_1_1core_1_1_slice_update.html index 5397cc5b3..1f863e336 100644 --- a/docs/build/html/classmlx_1_1core_1_1_slice_update.html +++ b/docs/build/html/classmlx_1_1core_1_1_slice_update.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::SliceUpdate Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -109,8 +123,8 @@ Inheritance diagram for mlx::core::SliceUpdate:
    - - + + @@ -130,6 +144,11 @@ Public Member Functions + + + + + @@ -158,9 +177,6 @@ Public Member Functions - - - @@ -173,8 +189,8 @@ Public Member Functions

    Public Member Functions

     SliceUpdate (Stream stream, const std::vector< int > &start_indices, const std::vector< int > &end_indices, const std::vector< int > &strides)
     
     SliceUpdate (Stream stream, const Shape &start_indices, const Shape &end_indices, const Shape &strides)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     

    Constructor & Destructor Documentation

    - -

    ◆ SliceUpdate()

    + +

    ◆ SliceUpdate()

    @@ -190,22 +206,22 @@ Public Member Functions - const std::vector< int > & start_indices, + const Shape & start_indices, - const std::vector< int > & end_indices, + const Shape & end_indices, - const std::vector< int > & strides ) + const Shape & strides ) -inlineexplicit +inlineexplicit
    @@ -235,7 +251,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -266,7 +282,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -293,7 +309,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -331,7 +347,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -340,6 +356,36 @@ Public Member Functions

    Reimplemented from mlx::core::Primitive.

    +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::SliceUpdate::output_shapes (const std::vector< array > & inputs)
    +
    +inlineoverridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    +
    @@ -360,7 +406,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -369,6 +415,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::SliceUpdate::state () const
    +
    +inline
    +
    +
    @@ -403,7 +474,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -436,7 +507,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,10 +523,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_slice_update.js b/docs/build/html/classmlx_1_1core_1_1_slice_update.js new file mode 100644 index 000000000..88249a82e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_slice_update.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_slice_update = +[ + [ "SliceUpdate", "classmlx_1_1core_1_1_slice_update.html#a63a49264b18340f2bc442c081a7b4c7a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_slice_update.html#ad82ca0e3ab88a0e086431050deea831b", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_slice_update.html#aac1a1d122e5697be057d63552141032b", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_slice_update.html#a60f588acced42391e6e5615ae8d16119", null ], + [ "jvp", "classmlx_1_1core_1_1_slice_update.html#a0ce3248cc61dae2b51d7aa8ee4197611", null ], + [ "output_shapes", "classmlx_1_1core_1_1_slice_update.html#abb6376f13c4269bd9e739e131893da53", null ], + [ "print", "classmlx_1_1core_1_1_slice_update.html#a751eefb9922c56479b4b0de2ad45439b", null ], + [ "state", "classmlx_1_1core_1_1_slice_update.html#aac5156a19209274b7de1dff231ef25fd", null ], + [ "vjp", "classmlx_1_1core_1_1_slice_update.html#aedcdc60a0477997a96306c02b66d3f77", null ], + [ "vmap", "classmlx_1_1core_1_1_slice_update.html#adbf1c76de6ab2f986758530d351d6fa3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_softmax-members.html b/docs/build/html/classmlx_1_1core_1_1_softmax-members.html index 8f7fa10c0..f59d97a7c 100644 --- a/docs/build/html/classmlx_1_1core_1_1_softmax-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_softmax-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Softmax Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Softmaxinlinevirtual Softmax(Stream stream, bool precise)mlx::core::Softmaxinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Softmaxvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Softmaxvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Softmaxinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Softmaxvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Softmaxvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_softmax.html b/docs/build/html/classmlx_1_1core_1_1_softmax.html index 7b293ae7a..493ab5c26 100644 --- a/docs/build/html/classmlx_1_1core_1_1_softmax.html +++ b/docs/build/html/classmlx_1_1core_1_1_softmax.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Softmax Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Softmax::output_shapes std::vector< Shape > mlx::core::Softmax::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Softmax::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_softmax.js b/docs/build/html/classmlx_1_1core_1_1_softmax.js new file mode 100644 index 000000000..65169962d --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_softmax.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_softmax = +[ + [ "Softmax", "classmlx_1_1core_1_1_softmax.html#a4ec686aac4e06f0dfe2cbd6801af40eb", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_softmax.html#ac9ebc2eab1683b682e689ed8f4622b79", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_softmax.html#a35dac69ddcc7e2ec0e1a76fe93db85af", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_softmax.html#a9215ed7bd36bc11276c58dfb9808d728", null ], + [ "jvp", "classmlx_1_1core_1_1_softmax.html#af96172634a24332b0fc8d7ca7e73f19f", null ], + [ "output_shapes", "classmlx_1_1core_1_1_softmax.html#a1a798a4dcd62486362d4b58582357490", null ], + [ "print", "classmlx_1_1core_1_1_softmax.html#aa783610ef6b82b92681e78fc99412d83", null ], + [ "state", "classmlx_1_1core_1_1_softmax.html#adf665f7c292e84f56c630016b75427f3", null ], + [ "vjp", "classmlx_1_1core_1_1_softmax.html#abb68c311c45ee422a7c966accde9041b", null ], + [ "vmap", "classmlx_1_1core_1_1_softmax.html#ad22d3dcc71054d3dba529cf2dc981e19", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sort-members.html b/docs/build/html/classmlx_1_1core_1_1_sort-members.html index 5af387bd3..4ae714150 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sort-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sort-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sort Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Sortinlinevirtual Sort(Stream stream, int axis)mlx::core::Sortinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Sortvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Sortvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Sortinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Sortvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Sortvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sort.html b/docs/build/html/classmlx_1_1core_1_1_sort.html index cd0f38691..b620f88ad 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sort.html +++ b/docs/build/html/classmlx_1_1core_1_1_sort.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sort Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -127,12 +141,14 @@ Public Member Functions void print (std::ostream &os) override  Print the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sort::output_shapes std::vector< Shape > mlx::core::Sort::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Sort::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sort.js b/docs/build/html/classmlx_1_1core_1_1_sort.js new file mode 100644 index 000000000..84bbbd8e6 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sort.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_sort = +[ + [ "Sort", "classmlx_1_1core_1_1_sort.html#a62943032dbd72e85ceb9b4b7211f4a44", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sort.html#a459769a0241b2620e55bedaba19827cd", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sort.html#a4141c48f0e8670c728663f3722675382", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sort.html#ae48f07cf641d54234fc4fb6529a33511", null ], + [ "jvp", "classmlx_1_1core_1_1_sort.html#af113ac983473433eec851c8fddfcba62", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sort.html#acc0a3f078b3f4c83e6e1137cb81ee62c", null ], + [ "print", "classmlx_1_1core_1_1_sort.html#ada81b9343f80958174eba708452927a2", null ], + [ "state", "classmlx_1_1core_1_1_sort.html#a5ab15d1a89efd8661887c805c35fc617", null ], + [ "vjp", "classmlx_1_1core_1_1_sort.html#a3a8900dce53ee4eb7a1b83806e629358", null ], + [ "vmap", "classmlx_1_1core_1_1_sort.html#abfabb9e625cc0cb9335c7454ed27505c", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_split-members.html b/docs/build/html/classmlx_1_1core_1_1_split-members.html index a7334dab7..295599515 100644 --- a/docs/build/html/classmlx_1_1core_1_1_split-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_split-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Split Member List
    @@ -106,16 +120,19 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Splitinlinevirtual - Split(Stream stream, const std::vector< int > &indices, int axis)mlx::core::Splitinlineexplicit - stream()mlx::core::Primitiveinline - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Splitvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Splitvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual + Split(Stream stream, const Shape &indices, int axis)mlx::core::Splitinlineexplicit + state() constmlx::core::Splitinline + stream()mlx::core::Primitiveinline + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Splitvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Splitvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_split.html b/docs/build/html/classmlx_1_1core_1_1_split.html index 215d94f5e..0eae6d804 100644 --- a/docs/build/html/classmlx_1_1core_1_1_split.html +++ b/docs/build/html/classmlx_1_1core_1_1_split.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Split Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -108,8 +122,8 @@ Inheritance diagram for mlx::core::Split:
    - - + + @@ -130,6 +144,8 @@ Public Member Functions + + @@ -139,7 +155,7 @@ Public Member Functions - + @@ -154,8 +170,8 @@ Public Member Functions

    Public Member Functions

     Split (Stream stream, const std::vector< int > &indices, int axis)
     
     Split (Stream stream, const Shape &indices, int axis)
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    std::pair< std::vector< int >, int > state () const
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     

    Constructor & Destructor Documentation

    - -

    ◆ Split()

    + +

    ◆ Split()

    @@ -171,7 +187,7 @@ Public Member Functions - const std::vector< int > & indices, + const Shape & indices, @@ -181,7 +197,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -211,7 +227,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -245,7 +261,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -272,7 +288,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -310,7 +326,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -339,7 +355,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -348,6 +364,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::pair< std::vector< int >, int > mlx::core::Split::state () const
    +
    +inline
    +
    +
    @@ -382,7 +423,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -415,7 +456,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -431,10 +472,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_split.js b/docs/build/html/classmlx_1_1core_1_1_split.js new file mode 100644 index 000000000..a7b17b438 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_split.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_split = +[ + [ "Split", "classmlx_1_1core_1_1_split.html#ad3f4ed34b85c73683bad5d530309342f", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_split.html#aff2889cb9074f0fda53edf8fa40b1fd4", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_split.html#a78ddda89c4daee73c74cfbc1e44656df", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_split.html#af25a0cc259573b9dce60d285eee18345", null ], + [ "jvp", "classmlx_1_1core_1_1_split.html#ab8a8d30fd1ebf0891f41f3c32eabe282", null ], + [ "print", "classmlx_1_1core_1_1_split.html#ad0c31fe5972643cc75fde10445fc47f2", null ], + [ "state", "classmlx_1_1core_1_1_split.html#a915156cde0448ec26776e329004b1a92", null ], + [ "vjp", "classmlx_1_1core_1_1_split.html#a7e8730f9cffa9872fff6f8d577031674", null ], + [ "vmap", "classmlx_1_1core_1_1_split.html#ab7c40e02a842e83bdb4698608472c7a6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_sqrt-members.html b/docs/build/html/classmlx_1_1core_1_1_sqrt-members.html index 4a89dcbaf..4ba6f0cfd 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sqrt-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_sqrt-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Sqrt Member List
    @@ -111,19 +125,22 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Sqrtinlinevirtual Sqrt(Stream stream, bool recip=false)mlx::core::Sqrtinlineexplicit - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Sqrtvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Sqrtvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Sqrtinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Sqrtvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Sqrtvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sqrt.html b/docs/build/html/classmlx_1_1core_1_1_sqrt.html index 1757f7073..7cab3eeea 100644 --- a/docs/build/html/classmlx_1_1core_1_1_sqrt.html +++ b/docs/build/html/classmlx_1_1core_1_1_sqrt.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Sqrt Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -124,12 +138,14 @@ Public Member Functions std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override  The vector-Jacobian product.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  void print (std::ostream &os) override  Print the primitive.
      @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Sqrt::output_shapes std::vector< Shape > mlx::core::Sqrt::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Sqrt::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_sqrt.js b/docs/build/html/classmlx_1_1core_1_1_sqrt.js new file mode 100644 index 000000000..13f140040 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_sqrt.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_sqrt = +[ + [ "Sqrt", "classmlx_1_1core_1_1_sqrt.html#a6682a7c31ca427c9d2c5ddb6a479bf29", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_sqrt.html#a5a64ecc4eef1e30a2963435dca7cefd5", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_sqrt.html#a6d205e679a593d1ba20206c5c47ba501", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_sqrt.html#ab871c2b8ab4a27a3f782a005d0e87c46", null ], + [ "jvp", "classmlx_1_1core_1_1_sqrt.html#a78544b1fb5da0c14bce3051ffd177818", null ], + [ "output_shapes", "classmlx_1_1core_1_1_sqrt.html#ae45215d61e2e99749d9a0bae291edd45", null ], + [ "print", "classmlx_1_1core_1_1_sqrt.html#a8681c8de2f50049848d320c47f713c0f", null ], + [ "state", "classmlx_1_1core_1_1_sqrt.html#a053853757ad99195e3f2b1cca571e31b", null ], + [ "vjp", "classmlx_1_1core_1_1_sqrt.html#a08a21bd2c3a016f042d95aca294e68f3", null ], + [ "vmap", "classmlx_1_1core_1_1_sqrt.html#a9d30e306ce08980c27d98c898577017e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_square-members.html b/docs/build/html/classmlx_1_1core_1_1_square-members.html index 66ce10674..6aa5f7901 100644 --- a/docs/build/html/classmlx_1_1core_1_1_square-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_square-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Square Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_square.html b/docs/build/html/classmlx_1_1core_1_1_square.html index 2a432c233..f00943e82 100644 --- a/docs/build/html/classmlx_1_1core_1_1_square.html +++ b/docs/build/html/classmlx_1_1core_1_1_square.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Square Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Square::output_shapes std::vector< Shape > mlx::core::Square::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_square.js b/docs/build/html/classmlx_1_1core_1_1_square.js new file mode 100644 index 000000000..314143950 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_square.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_square = +[ + [ "Square", "classmlx_1_1core_1_1_square.html#ab94e28d5c92e6febc1c74e525f730dc4", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_square.html#a1f4d327a705950616da63b83c2829e59", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_square.html#a0ea2a78a5bb52daa4103263bf2f98045", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_square.html#a6abc881d44071019aa15481e5ea75ab2", null ], + [ "jvp", "classmlx_1_1core_1_1_square.html#a822629b93b91e2bef29959431d95e22d", null ], + [ "output_shapes", "classmlx_1_1core_1_1_square.html#a0513541766bb997ed166643fe95a6d38", null ], + [ "print", "classmlx_1_1core_1_1_square.html#a75feb558cd1d615e96309dd7d1e81384", null ], + [ "vjp", "classmlx_1_1core_1_1_square.html#abcd9516da7f02dc906368c23b0bca263", null ], + [ "vmap", "classmlx_1_1core_1_1_square.html#a55bf43f878d4741c57a08d5fef472ea5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_squeeze-members.html b/docs/build/html/classmlx_1_1core_1_1_squeeze-members.html new file mode 100644 index 000000000..713b09cf4 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_squeeze-members.html @@ -0,0 +1,147 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::Squeeze Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::Squeeze, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::Squeezevirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::Squeezevirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::Squeezevirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::Squeezevirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shape(const array &input, const std::vector< int > &axes)mlx::core::Squeezestatic
    output_shapes(const std::vector< array > &inputs) overridemlx::core::Squeezevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::Squeezeinlinevirtual
    Squeeze(Stream stream, std::vector< int > axes)mlx::core::Squeezeinlineexplicit
    state() constmlx::core::Squeezeinline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Squeezevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Squeezevirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_squeeze.html b/docs/build/html/classmlx_1_1core_1_1_squeeze.html new file mode 100644 index 000000000..046932d5b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_squeeze.html @@ -0,0 +1,560 @@ + + + + + + + +MLX: mlx::core::Squeeze Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::Squeeze Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::Squeeze:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Squeeze (Stream stream, std::vector< int > axes)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + + +

    +Static Public Member Functions

    static Shape output_shape (const array &input, const std::vector< int > &axes)
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ Squeeze()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    mlx::core::Squeeze::Squeeze (Stream stream,
    std::vector< int > axes )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Squeeze::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Squeeze::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::Squeeze::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Squeeze::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static Shape mlx::core::Squeeze::output_shape (const array & input,
    const std::vector< int > & axes )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::Squeeze::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::Squeeze::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Squeeze::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Squeeze::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::Squeeze::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_squeeze.js b/docs/build/html/classmlx_1_1core_1_1_squeeze.js new file mode 100644 index 000000000..4c530ea18 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_squeeze.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_squeeze = +[ + [ "Squeeze", "classmlx_1_1core_1_1_squeeze.html#a032bd53dcc3d71a11d810bc3ca3ef4b0", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_squeeze.html#a9bcb7476041020f59ef816196ddb81cb", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_squeeze.html#a18d382c8bc59d60b38e9fd1cb70660fd", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_squeeze.html#a08f35991d36e30fa4c05a5c9e91feb93", null ], + [ "jvp", "classmlx_1_1core_1_1_squeeze.html#a65ac5f63f98d85453ad884e9fa6e8083", null ], + [ "output_shape", "classmlx_1_1core_1_1_squeeze.html#aadf1d3b85839390a2ec560603aeed04a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_squeeze.html#a839d9d72ac0a19e1146b5b470292a174", null ], + [ "print", "classmlx_1_1core_1_1_squeeze.html#a74c9c825b5b968badb9bca8159eabcdf", null ], + [ "state", "classmlx_1_1core_1_1_squeeze.html#a04f9d2595cb7d4ec988479cd33fe9362", null ], + [ "vjp", "classmlx_1_1core_1_1_squeeze.html#a8d95a13d7cc5586d48a38e9199180d06", null ], + [ "vmap", "classmlx_1_1core_1_1_squeeze.html#aa098a5850741bfb621800c7badce3532", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_squeeze.png b/docs/build/html/classmlx_1_1core_1_1_squeeze.png new file mode 100644 index 0000000000000000000000000000000000000000..876943bcc01e4f03af0bf6cb876db6ec86dc716b GIT binary patch literal 911 zcmeAS@N?(olHy`uVBq!ia0vp^(}1{xgBeH~F+Z{fQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GUto-U3d6^w7^zV2IWz~kn> z&tvNS|DDr=^gKDP>^+kc_FB+=>4O=~$^QQ*6`yf$Bedbb#vzJxS_b~0>zoYKz*UMGWqR1vPr3QBW*>KkS&B_6c_O+t*ZH;QopaWyzCooS>wjER@wybR zyhY`tcZTPr=@%xc=s(VSI_Gl%Lru5zfr_4$rMr1wnl8JRV!G)1f+)jIhB_zi1Kt^o z6`Z;Z`U_bfsBU4{(<0U|{Q}bmp(utpB+37cVdpIS*&`>p!A)NrHc7?4_{Y;(CI4Ti z&OayLu5$HH+cnoCHxK!0uYLB}b7Ml~)vw8Xx9`_+&&%6V*q>9q>uJ=_C7Kn#gPz^p z`fQJ#3g>E5nv=&)U6KF#f`;ZGXx_bnjQ*xvI8rd1&8JV^Dx_-ahyJ_gTL8 zSM$<#Ee;i3XxusJOKIF6`5)f)cKOkNS6urY_Wv9(JpYzDc~9EYvwCXrxx~b;r53;N^_}+oQm;gU=lGl)?b*K_U!1wudBY- zPB?SM?&0sK;vdW7o=3f$_q(pxPIKNCk>tNK4tM<$DLj2?X3@o<^WCfBGJGw=x2A;2 z9X)QlY{!vx}Z}&x|}9y0x!gYt_UvYnE0l-gH5B?Y&j+vt@Vfx%L0J-ucwn z?fJ63=eJB-9uxZd!l(8u(MJE{hn9w>W>&8b)!s7go=wi9YjN{)lMIXIdfs8rxqm5F zX#2MR*HmWBtUYymr}ODEXHM_`9h{r??RLwwnKP#sZVmFvwD`xMacTCP_?4p0z^udI M>FVdQ&MBb@0D~6FO#lD@ literal 0 HcmV?d00001 diff --git a/docs/build/html/classmlx_1_1core_1_1_stop_gradient-members.html b/docs/build/html/classmlx_1_1core_1_1_stop_gradient-members.html index 1d9b8f9a7..220244180 100644 --- a/docs/build/html/classmlx_1_1core_1_1_stop_gradient-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_stop_gradient-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::StopGradient Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_stop_gradient.html b/docs/build/html/classmlx_1_1core_1_1_stop_gradient.html index d571be713..7814228c2 100644 --- a/docs/build/html/classmlx_1_1core_1_1_stop_gradient.html +++ b/docs/build/html/classmlx_1_1core_1_1_stop_gradient.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::StopGradient Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -124,7 +138,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -300,7 +314,7 @@ Public Member Functions - + @@ -308,7 +322,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::StopGradient::output_shapes std::vector< Shape > mlx::core::StopGradient::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -371,7 +385,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -387,10 +401,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_stop_gradient.js b/docs/build/html/classmlx_1_1core_1_1_stop_gradient.js new file mode 100644 index 000000000..4cd485661 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_stop_gradient.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_stop_gradient = +[ + [ "StopGradient", "classmlx_1_1core_1_1_stop_gradient.html#ac70d1ab819d04e00f76bc25aeebaf84f", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_stop_gradient.html#a56207714d374b08f60e4d9cdbc7340b2", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_stop_gradient.html#a907b96f0a1ce608e211d87ccf2b9ca89", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_stop_gradient.html#a327539298b21d800d26482b94fce41b3", null ], + [ "output_shapes", "classmlx_1_1core_1_1_stop_gradient.html#a8af7641d478505d1dc39c75ba7d5a3cf", null ], + [ "print", "classmlx_1_1core_1_1_stop_gradient.html#acc7a7d51cbf014dae8ba3d20bedcad50", null ], + [ "vmap", "classmlx_1_1core_1_1_stop_gradient.html#aca680c8befef81da414c4375b11b16b0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_subtract-members.html b/docs/build/html/classmlx_1_1core_1_1_subtract-members.html index 8bf2cd270..70972f3c7 100644 --- a/docs/build/html/classmlx_1_1core_1_1_subtract-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_subtract-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Subtract Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_subtract.html b/docs/build/html/classmlx_1_1core_1_1_subtract.html index c597379c1..97357a83a 100644 --- a/docs/build/html/classmlx_1_1core_1_1_subtract.html +++ b/docs/build/html/classmlx_1_1core_1_1_subtract.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Subtract Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Subtract::output_shapes std::vector< Shape > mlx::core::Subtract::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_subtract.js b/docs/build/html/classmlx_1_1core_1_1_subtract.js new file mode 100644 index 000000000..c8f4c67c6 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_subtract.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_subtract = +[ + [ "Subtract", "classmlx_1_1core_1_1_subtract.html#a834854757394f8de7082af65bf86ed9c", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_subtract.html#a47574258b6c95f8ad260c114d6d36a12", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_subtract.html#a69021b23daf061764d97fabbc0f4f06c", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_subtract.html#af1c05e1e3f703ba916d54f8ccbbd102b", null ], + [ "jvp", "classmlx_1_1core_1_1_subtract.html#a8100081a99df5166f02efc76d6641220", null ], + [ "output_shapes", "classmlx_1_1core_1_1_subtract.html#aaaff4872bde70ad40cf90e6131ea0489", null ], + [ "print", "classmlx_1_1core_1_1_subtract.html#a3834fd305435fb5a8e512566832e372b", null ], + [ "vjp", "classmlx_1_1core_1_1_subtract.html#a3a3322be7c3bcaa0397cf099091df16b", null ], + [ "vmap", "classmlx_1_1core_1_1_subtract.html#aa98f960e621a767c8a03624fd292f098", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_tan-members.html b/docs/build/html/classmlx_1_1core_1_1_tan-members.html index 1b4643339..65a873690 100644 --- a/docs/build/html/classmlx_1_1core_1_1_tan-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_tan-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Tan Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_tan.html b/docs/build/html/classmlx_1_1core_1_1_tan.html index 7bb932a84..f434613d0 100644 --- a/docs/build/html/classmlx_1_1core_1_1_tan.html +++ b/docs/build/html/classmlx_1_1core_1_1_tan.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Tan Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Tan::output_shapes std::vector< Shape > mlx::core::Tan::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_tan.js b/docs/build/html/classmlx_1_1core_1_1_tan.js new file mode 100644 index 000000000..d77454fc8 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_tan.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_tan = +[ + [ "Tan", "classmlx_1_1core_1_1_tan.html#a8dcc9ff660210ccf05134dd95f47de08", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_tan.html#a9c9a731158fa60eef30067fe0da9f3e9", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_tan.html#aca7dbb4836507005a2032ac957a04d3f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_tan.html#afdf46288e7f60ea7f878688347dff7e4", null ], + [ "jvp", "classmlx_1_1core_1_1_tan.html#a5d7c76122d63619df17b0e45450bc8f2", null ], + [ "output_shapes", "classmlx_1_1core_1_1_tan.html#a9e4bba311bb24617dbb5ca591bc2868e", null ], + [ "print", "classmlx_1_1core_1_1_tan.html#aeea7c284d595a2a928d5f28a55e9be7f", null ], + [ "vjp", "classmlx_1_1core_1_1_tan.html#a4639836cff03d73c769387d6943e92d7", null ], + [ "vmap", "classmlx_1_1core_1_1_tan.html#ae2f67ca2adc83b10009cf28498bf58b7", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_tanh-members.html b/docs/build/html/classmlx_1_1core_1_1_tanh-members.html index 2cac2f935..edcf7ebdf 100644 --- a/docs/build/html/classmlx_1_1core_1_1_tanh-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_tanh-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::Tanh Member List
    @@ -120,10 +134,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_tanh.html b/docs/build/html/classmlx_1_1core_1_1_tanh.html index ca65580d1..57eae3a87 100644 --- a/docs/build/html/classmlx_1_1core_1_1_tanh.html +++ b/docs/build/html/classmlx_1_1core_1_1_tanh.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Tanh Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -130,7 +144,7 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      - Public Member Functions inherited from mlx::core::UnaryPrimitive @@ -191,7 +205,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -221,7 +235,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -252,7 +266,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -279,7 +293,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +331,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -338,7 +352,7 @@ Public Member Functions - + @@ -346,7 +360,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Tanh::output_shapes std::vector< Shape > mlx::core::Tanh::output_shapes ( const std::vector< array > & inputs)
    -inlineoverridevirtual +inlineoverridevirtual
    @@ -376,7 +390,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -419,7 +433,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -452,7 +466,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -468,10 +482,13 @@ Public Member Functions
  • mlx/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_tanh.js b/docs/build/html/classmlx_1_1core_1_1_tanh.js new file mode 100644 index 000000000..872ec327e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_tanh.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1_tanh = +[ + [ "Tanh", "classmlx_1_1core_1_1_tanh.html#ae551297bf573e1802fb831440276dee4", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_tanh.html#af7ed4345f622da069e5b0284067923f5", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_tanh.html#a48df896599ae93dbce84a5c0f50cf761", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_tanh.html#a0692a1de2373b86eb394252ed4fecfda", null ], + [ "jvp", "classmlx_1_1core_1_1_tanh.html#ae0fbb5370dc1c3a4fb0dd02ca28a832a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_tanh.html#a8873286b69b805486fa83c4806843f3d", null ], + [ "print", "classmlx_1_1core_1_1_tanh.html#a73f4976d641daf697cc1a231d773d78e", null ], + [ "vjp", "classmlx_1_1core_1_1_tanh.html#afe7b05e2b36b99c3a1b66f0cd3544e95", null ], + [ "vmap", "classmlx_1_1core_1_1_tanh.html#a32df3564c1ecb858c1ba9f855376762f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_transpose-members.html b/docs/build/html/classmlx_1_1core_1_1_transpose-members.html index 6985bf33f..b017599fb 100644 --- a/docs/build/html/classmlx_1_1core_1_1_transpose-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_transpose-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::Transpose Member List
    @@ -110,20 +124,23 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Transposeinlinevirtual - stream()mlx::core::Primitiveinline - Transpose(Stream stream, const std::vector< int > &axes)mlx::core::Transposeinlineexplicit - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Transposevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Transposevirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Transposeinline + stream()mlx::core::Primitiveinline + Transpose(Stream stream, const std::vector< int > &axes)mlx::core::Transposeinlineexplicit + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Transposevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Transposevirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_transpose.html b/docs/build/html/classmlx_1_1core_1_1_transpose.html index 5635332dd..8de54b437 100644 --- a/docs/build/html/classmlx_1_1core_1_1_transpose.html +++ b/docs/build/html/classmlx_1_1core_1_1_transpose.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::Transpose Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -130,9 +144,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +std::vector< int > state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +337,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -342,7 +358,7 @@ Public Member Functions - + @@ -350,7 +366,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::Transpose::output_shapes std::vector< Shape > mlx::core::Transpose::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -380,7 +396,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -389,6 +405,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< int > mlx::core::Transpose::state () const
    +
    +inline
    +
    +
    @@ -423,7 +464,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -456,7 +497,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -472,10 +513,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_transpose.js b/docs/build/html/classmlx_1_1core_1_1_transpose.js new file mode 100644 index 000000000..2dcc567dc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_transpose.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_transpose = +[ + [ "Transpose", "classmlx_1_1core_1_1_transpose.html#a1a9ba023584c61c7ac93d6dce536760a", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_transpose.html#a1fbcfcca43f9ec06c63a3c14708c30f8", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_transpose.html#a38d25739c08aa594a6775015a1d7d92e", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_transpose.html#a799ec3c3fa9f1b9e6177c755252a3eab", null ], + [ "jvp", "classmlx_1_1core_1_1_transpose.html#ac1a523e25ab7fd9df4da363a922afbe1", null ], + [ "output_shapes", "classmlx_1_1core_1_1_transpose.html#ac9328f43900bedec555909d09202ccd7", null ], + [ "print", "classmlx_1_1core_1_1_transpose.html#ac6c87b850f4e5560aa13a5e1e9f9fe04", null ], + [ "state", "classmlx_1_1core_1_1_transpose.html#a23167291e2bf12e2bb2e51d1db340909", null ], + [ "vjp", "classmlx_1_1core_1_1_transpose.html#ac7805aa29b34afdf8852554f1e759f80", null ], + [ "vmap", "classmlx_1_1core_1_1_transpose.html#a5ef848b69def9a246665b67e6e3ffdfe", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_unary_primitive-members.html b/docs/build/html/classmlx_1_1core_1_1_unary_primitive-members.html index daf43d2ea..68017cd9e 100644 --- a/docs/build/html/classmlx_1_1core_1_1_unary_primitive-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_unary_primitive-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::UnaryPrimitive Member List
    @@ -119,10 +133,12 @@ $(function(){ initResizable(false); }); ~Primitive()=defaultmlx::core::Primitivevirtual ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_unary_primitive.html b/docs/build/html/classmlx_1_1core_1_1_unary_primitive.html index 131ecb990..e39d9ef13 100644 --- a/docs/build/html/classmlx_1_1core_1_1_unary_primitive.html +++ b/docs/build/html/classmlx_1_1core_1_1_unary_primitive.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::UnaryPrimitive Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    -
    mlx::core::UnaryPrimitive Class Referenceabstract
    +
    mlx::core::UnaryPrimitive Class Referenceabstract
    @@ -102,98 +116,104 @@ Inheritance diagram for mlx::core::UnaryPrimitive:
    -mlx::core::Primitive -mlx::core::Abs -mlx::core::Add -mlx::core::AddMM -mlx::core::Arange -mlx::core::ArcCos -mlx::core::ArcCosh -mlx::core::ArcSin -mlx::core::ArcSinh -mlx::core::ArcTan -mlx::core::ArcTan2 -mlx::core::ArcTanh -mlx::core::ArgPartition -mlx::core::ArgReduce -mlx::core::ArgSort -mlx::core::AsStrided -mlx::core::AsType -mlx::core::BitwiseBinary -mlx::core::BlockMaskedMM -mlx::core::Broadcast -mlx::core::Ceil -mlx::core::Cholesky -mlx::core::Concatenate -mlx::core::Conjugate -mlx::core::Contiguous -mlx::core::Convolution -mlx::core::Copy -mlx::core::Cos -mlx::core::Cosh -mlx::core::Divide -mlx::core::Equal -mlx::core::Erf -mlx::core::ErfInv -mlx::core::Exp -mlx::core::Expm1 -mlx::core::FFT -mlx::core::Floor -mlx::core::Full -mlx::core::Gather -mlx::core::GatherMM -mlx::core::GatherQMM -mlx::core::Greater -mlx::core::GreaterEqual -mlx::core::Hadamard -mlx::core::Imag -mlx::core::Inverse -mlx::core::Less -mlx::core::LessEqual -mlx::core::Load -mlx::core::Log -mlx::core::Log1p -mlx::core::LogAddExp -mlx::core::LogicalAnd -mlx::core::LogicalNot -mlx::core::LogicalOr -mlx::core::Matmul -mlx::core::Maximum -mlx::core::Minimum -mlx::core::Multiply -mlx::core::Negative -mlx::core::NotEqual -mlx::core::NumberOfElements -mlx::core::Pad -mlx::core::Partition -mlx::core::Power -mlx::core::QuantizedMatmul -mlx::core::RandomBits -mlx::core::Real -mlx::core::Reduce -mlx::core::Remainder -mlx::core::Reshape -mlx::core::Round -mlx::core::Scan -mlx::core::Scatter -mlx::core::Select -mlx::core::Sigmoid -mlx::core::Sign -mlx::core::Sin -mlx::core::Sinh -mlx::core::Slice -mlx::core::SliceUpdate -mlx::core::Softmax -mlx::core::Sort -mlx::core::Sqrt -mlx::core::Square -mlx::core::StopGradient -mlx::core::Subtract -mlx::core::Tan -mlx::core::Tanh -mlx::core::Transpose -mlx::core::Uniform -mlx::core::View +mlx::core::Primitive +mlx::core::Abs +mlx::core::Add +mlx::core::AddMM +mlx::core::Arange +mlx::core::ArcCos +mlx::core::ArcCosh +mlx::core::ArcSin +mlx::core::ArcSinh +mlx::core::ArcTan +mlx::core::ArcTan2 +mlx::core::ArcTanh +mlx::core::ArgPartition +mlx::core::ArgReduce +mlx::core::ArgSort +mlx::core::AsStrided +mlx::core::AsType +mlx::core::BitwiseBinary +mlx::core::BlockMaskedMM +mlx::core::Broadcast +mlx::core::BroadcastAxes +mlx::core::Ceil +mlx::core::Cholesky +mlx::core::Concatenate +mlx::core::Conjugate +mlx::core::Contiguous +mlx::core::Convolution +mlx::core::Copy +mlx::core::Cos +mlx::core::Cosh +mlx::core::Divide +mlx::core::DynamicSlice +mlx::core::DynamicSliceUpdate +mlx::core::Equal +mlx::core::Erf +mlx::core::ErfInv +mlx::core::Exp +mlx::core::ExpandDims +mlx::core::Expm1 +mlx::core::FFT +mlx::core::Flatten +mlx::core::Floor +mlx::core::Full +mlx::core::Gather +mlx::core::GatherMM +mlx::core::GatherQMM +mlx::core::Greater +mlx::core::GreaterEqual +mlx::core::Hadamard +mlx::core::Imag +mlx::core::Inverse +mlx::core::Less +mlx::core::LessEqual +mlx::core::Load +mlx::core::Log +mlx::core::Log1p +mlx::core::LogAddExp +mlx::core::LogicalAnd +mlx::core::LogicalNot +mlx::core::LogicalOr +mlx::core::Matmul +mlx::core::Maximum +mlx::core::Minimum +mlx::core::Multiply +mlx::core::Negative +mlx::core::NotEqual +mlx::core::NumberOfElements +mlx::core::Pad +mlx::core::Partition +mlx::core::Power +mlx::core::QuantizedMatmul +mlx::core::RandomBits +mlx::core::Real +mlx::core::Reduce +mlx::core::Remainder +mlx::core::Reshape +mlx::core::Round +mlx::core::Scan +mlx::core::Scatter +mlx::core::Select +mlx::core::Sigmoid +mlx::core::Sign +mlx::core::Sin +mlx::core::Sinh +mlx::core::Slice +mlx::core::SliceUpdate +mlx::core::Softmax +mlx::core::Sort +mlx::core::Sqrt +mlx::core::Square +mlx::core::Squeeze +mlx::core::StopGradient +mlx::core::Subtract +mlx::core::Tan +mlx::core::Tanh +mlx::core::Transpose +mlx::core::Unflatten +mlx::core::View
    @@ -245,7 +265,7 @@ Public Member Functions - + @@ -278,7 +298,7 @@ Public Member Functions
    virtual bool is_equivalent (const Primitive &other) const
     Equivalence check defaults to false unless overridden by the primitive.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
    -inlineexplicit +inlineexplicit
    @@ -305,7 +325,7 @@ Public Member Functions -virtualdefault +virtualdefault
    @@ -330,7 +350,7 @@ Public Member Functions -delete +delete
    @@ -355,7 +375,7 @@ Public Member Functions -delete +delete
    @@ -385,12 +405,12 @@ Public Member Functions -pure virtual +pure virtual
    -

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Uniform, and mlx::core::View.

    +

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Unflatten, and mlx::core::View.

    @@ -416,7 +436,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -450,12 +470,12 @@ Public Member Functions -pure virtual +pure virtual
    -

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::Expm1, mlx::core::FFT, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Uniform, and mlx::core::View.

    +

    Implemented in mlx::core::Abs, mlx::core::Add, mlx::core::AddMM, mlx::core::Arange, mlx::core::ArcCos, mlx::core::ArcCosh, mlx::core::ArcSin, mlx::core::ArcSinh, mlx::core::ArcTan2, mlx::core::ArcTan, mlx::core::ArcTanh, mlx::core::ArgPartition, mlx::core::ArgReduce, mlx::core::ArgSort, mlx::core::AsStrided, mlx::core::AsType, mlx::core::BitwiseBinary, mlx::core::BlockMaskedMM, mlx::core::Broadcast, mlx::core::BroadcastAxes, mlx::core::Ceil, mlx::core::Cholesky, mlx::core::Concatenate, mlx::core::Conjugate, mlx::core::Contiguous, mlx::core::Convolution, mlx::core::Copy, mlx::core::Cos, mlx::core::Cosh, mlx::core::Divide, mlx::core::DynamicSlice, mlx::core::DynamicSliceUpdate, mlx::core::Equal, mlx::core::Erf, mlx::core::ErfInv, mlx::core::Exp, mlx::core::ExpandDims, mlx::core::Expm1, mlx::core::FFT, mlx::core::Flatten, mlx::core::Floor, mlx::core::Full, mlx::core::Gather, mlx::core::GatherMM, mlx::core::GatherQMM, mlx::core::Greater, mlx::core::GreaterEqual, mlx::core::Hadamard, mlx::core::Imag, mlx::core::Inverse, mlx::core::Less, mlx::core::LessEqual, mlx::core::Load, mlx::core::Log1p, mlx::core::Log, mlx::core::LogAddExp, mlx::core::LogicalAnd, mlx::core::LogicalNot, mlx::core::LogicalOr, mlx::core::Matmul, mlx::core::Maximum, mlx::core::Minimum, mlx::core::Multiply, mlx::core::Negative, mlx::core::NotEqual, mlx::core::NumberOfElements, mlx::core::Pad, mlx::core::Partition, mlx::core::Power, mlx::core::QuantizedMatmul, mlx::core::RandomBits, mlx::core::Real, mlx::core::Reduce, mlx::core::Remainder, mlx::core::Reshape, mlx::core::Round, mlx::core::Scan, mlx::core::Scatter, mlx::core::Select, mlx::core::Sigmoid, mlx::core::Sign, mlx::core::Sin, mlx::core::Sinh, mlx::core::Slice, mlx::core::SliceUpdate, mlx::core::Softmax, mlx::core::Sort, mlx::core::Sqrt, mlx::core::Square, mlx::core::Squeeze, mlx::core::StopGradient, mlx::core::Subtract, mlx::core::Tan, mlx::core::Tanh, mlx::core::Transpose, mlx::core::Unflatten, and mlx::core::View.

    @@ -481,7 +501,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -508,7 +528,7 @@ Public Member Functions -delete +delete
    @@ -533,7 +553,7 @@ Public Member Functions -delete +delete
    @@ -544,10 +564,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_unary_primitive.js b/docs/build/html/classmlx_1_1core_1_1_unary_primitive.js new file mode 100644 index 000000000..1f1e44460 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_unary_primitive.js @@ -0,0 +1,13 @@ +var classmlx_1_1core_1_1_unary_primitive = +[ + [ "UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html#a189f6d4ed369f82a4b724a29eb056d4e", null ], + [ "~UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html#ac0677ab99a5ca660ed6ab7902ea364de", null ], + [ "UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html#a9935cffc4f246d3d883bc3d26c5163f2", null ], + [ "UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html#a780281fb04e2daf1be630c124bd605e3", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_unary_primitive.html#a7e8f6f5d6ae0a33f6abc0f5a46e0b132", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_unary_primitive.html#aa0ed6e32c36200a3ff9bc592c9b300db", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_unary_primitive.html#a6b7f80abaf038d53ec6ffbb0dfac6adb", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_unary_primitive.html#a971fe9ad47f6569118879ce1d0f41447", null ], + [ "operator=", "classmlx_1_1core_1_1_unary_primitive.html#a0a859309a4f192f2679e07f2e4ff4d22", null ], + [ "operator=", "classmlx_1_1core_1_1_unary_primitive.html#ab90b2ea80f1d914be03cf44def5db5a5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_unary_primitive.png b/docs/build/html/classmlx_1_1core_1_1_unary_primitive.png index d36a3f474cf1815dac0ef468483023bee33aa7d1..7022476d7429ba16b1b17f1e18651eafe08ba006 100644 GIT binary patch literal 37119 zcmdVDd0bQ1_BO89SGlc1Zm(CdGNiY*rL6*52aqALMWs&Q07MxQ(JCs+AVVOK#GxhE zqEKrU%M=wcLV$?KAR$DXV%k!O5JMP*h!G(P5HJbD2`A^>CkZ(8{(gUb-|q+gCk;vo zd+)Q>v!3;=XP?>b<8Arw;&*4vm|?l;>-9Tl%$P};F=N4h{yqzQMOD847A$dCmwy(uDC5t*Cr_S$udi+hxDNjAo!Ff|yJmp*#y>89%X&0p#t+|b zTK}bA!pworflJpm|1!J#gWdI#QF`4jn!}+z?J=>HJtY~gAAF*9#~gl{p7*37 z%U{N6W^eqQcjUVHMRc9%r;cnlgm6bx3H$b(L$_)+>jIb?`1!|Q{86E`@wFrT)Sbm1eP4YA+K*kM@-C1R zwftUxDIA7Q{zTN}+F#{E2jNSGTi-gC?Bq#=%~Q zGZjKYsnU+>3LhSBqvJSz4Ea)g`X=j+rz>!`x{??2l>A)^|0NfRt9Sn81%4L-zp2Z- zD>H+S&3ZV47^0Z@&tq%KE&lFDIkBGfqTC{Zns4!U|AZ4?=Ue;-eC>bwWvt?G<_+UQ z8z#mzz3}HS6Hhm+|F195-ysWTL&R7^_>BQsIhSsyt_1&fV*F||0=`vr+r2OHY?U6X zZ_tXP=L}lS`AP7T=U}{`v21MBm?~9Q1$Q=9x@X%U`JDSKOugPPt_gcgTMaixK$_m; zLCUkNIjsU~snD@81kQL6j)2b-)~U|bYA94!9GxF{u92Tv=T))w`9=sH2|L0#6tF;;rk$TZRG37m;QtwZZe4S4?=QsJ{AYrtVhR5QRw=No@ ze>qIwq(CmwEUJ2fw)lt*n$Sv{3OrGawJ5}OS%}qrpYR^1bXtuhD`Q6{8oG;=`>8LA zuxmvWM&70nvM!5HByXl;;E~9&yZ!icWh7lw?pA)=(KRApUH2y;$6Uf-Wz)P=Uu#>5 z_u_|OJ9L5k=Xf!>7!mdPri#FiBjfCIMx}POe$*Nf_>=*YpYrw3Ecu#$ik90uZaFI< zkaN}I(7mdQ_8;t2%>3|w<)t~iuQxGQw&Da!_aQ|x%GMU1-^^KDF!^#p>6OEAwe_T> zHX|21Vr#E!3)3rRJ(_gVaWf!ZAv64}i zPvCL$b&{T>PD$h?Qejt+LVZPMu*7G;EP4*DtnFwnQ<=A|x;>&1lH}bD{@D-9E~Du( zLpZu{!};29n7*DKm^{M7a5ckY8rPzo0v}x|?hPo4k7H}Uxgx_xkOfzj zp45e~RTMks2alM+hBPiu^;^Pq#O*HEupF%X=$!@bFMQo11QC&mZgFl&xk^^2Vucl> za8!G^jP|UiBH3MWjV;TL2P@9CFVzm#>4G&Tz|Y^M7R{{W^)9B4f-Ib2kfqXc^^6W0uijV zHw6b)x=Ns6YkCBqN|K z4?kTlE}|tpTW}|2kyEL)>@17(kPV^s3l3Yux`$>UOGjh9TX$z6fujZ9k zBer&_F=8$U5pyx+#GJE1|68FN%?Z2|G*#GvRN;J$K;^$0steEKex&WB-V7&fCDE1p zlAbl@6W{{HA0Km9s>C279JQ#bTl;lxwv~9as>3qq&%Pz_kYrpXmgr}aRrG(sRtKBw zkF^dAHL`rd(rW~L;`Mmhk%^7Ejm*_5@5az}r+FEzsgV!Fgg)nzU2ttPiDh1PtaUa$ z#T>`&Cgb=XYTTFn-MM~rrB~QwaLLfh-@Oy8+QOkUeGH<@+M4wu-*4z129Ff-K=-f8 z+w`ONXC_caK}hs^{UE)3*UY(shF1Xyui%Ryv-a+q`2o}?tFTW;f&V(9=tW=mw{gOVIu-*!jSCvU7g2Q z?A9@G>9nv_ik>z7@oBwizI0!fVz<$*v9L>O(FmQ_oQ-qMd=yt7*}@`-w(4p((@z_Q z{^`lz!FkA`FDe|>eFHTdEK8&nj;>K0;jUE?(huq+!#iSI*oH?ZY7-htq|j>QV|e)f zMWQavNdaI<_s104hkE&N?~0o6bZ&{RQ0@O(w0s5CPxmzX#{#ib_B2a47)X&Yvz(mU za&~7s@|3#x6Z)U4zwHpo#2~WJYp!8y-Do^+Pxqfs7fWoYi(soT<3XPx0tX#K-aXI# ztlL?SF0)Xr4s(tN9fngg8Fcj?{(+3PE!Qpmn{qn^(AaCX)xwK&`Pipm7 zd_;-OdozhT)dnte1xqbkV_IrMmV##}1kfmM699=;&P^v{$)o-f zaru_owQ-{j_%ooSk+zLz|6moPLqqvi*%J6ETRYinK8oO#MZ=bV8X;yMsi{$mO% z^ROw2w27zZNsq!BKvX#zi$)c8+&9q_kKH(ogt-)sgX-M1TE)Atfn6`mr*Iv_k!!LV zG`o0tn+P2Zd-#-9)+EP;*%}{R2`;w9c_Bj=h%{)4bbkn8pa6z=ZI)utbi{|htA_9J zWrN4uOLi5yKp#;g^qa3Q{L6Qspak_?BwEi|daj%Gp!okm&G=u}AN?ZH3*G-Tu>aOg z>{`<62_L%&Ux0g5w?J(0wX0-A1cMlpSrT$w_L)RQ{ihkDe`$9^9SuVI&2oABtH^wR(=>OLJ5w zuQEsV=TF&nr^I_W(6L#Nk*VST+@<1dMv#Y~;uma*{h-q>9iI*`46YQp!zU^HW!GM= z@f&$++O9ZrJ-XsO3&bN}#W^C@HeDk)_S=kUlwGDz$H?GWedH5CmrpB@^o!fb< z?k8L`2=CkaI~#lm$I|1u-4i2a%3|C}TJLgWQVlSjf7>BnEt~BWK@q;tyjMp1X6kk}1GDOlJ0P8~ z*2@1zg!p-rFfu#f{Dl`|B_WQkf)6X`%X_mf5q0=}hpiI*Ql8STb7i`}ngb$L?CuOd zB@3Mn3b9++?uE1<1))DRqfa5u*9~)3+6>M<$$_b&iai;W*c{>PUgb0XC{GVc z;Ni>=k$g2W8*V5!yl}Y!QL&p%SwS;@t>ZJ+T94Xr3rJHZjO%}qRwx^J55W9wJC z$$&uOR);Ux!7Bq*iqw<+A7#!<%xQ*1(-?aCO+n8B`N%yg0NCE?k@!m#?GIZbe0?nrw2wKAfPHAh<)9?xsx{M)(DS4C0y ztNVTgl)AprSLxTV3qshn_A_qV;j;YE~Itb>KM=U&1tkcZ6)gVh#xIlNVrJ!jNGDH z*?4O=hdXg_tvk}Q?n$Kt7u{mSsfK-tcPAQxo5{rlxWtH5cl$J&DzZlQqtNm9rI%opJ~>4XwAU3AVi1UrfF^^A_bo4!!?GXQ1bZ5@30fc&D0J5K=EU2UQD zK#H1kH?C*-R$VD=EgYL&$vu7YFh0l^- zJ9=SR*YBDNetqcB@m9qeLD>%Y#uUKqy3QVWUc|rMf|X{AgZ9?|ZsKVK!}_f9A}$Pl zP6$^n&27A>NFHADIlN!XI^Y#;xR&(- z#IT)}JzF@Lud}7oH^sw8Kn5|Oov`{5hcuRyM6$u1g$Hjpa~PQ2;ZWTmNSm!{C;dgO zxG9pnytUs!cev8U?ZR1Y>Q#MAUbjNEl#sj%mLiae{2y@&Yn=@r?=!q-g@lB}SIZUe zIXpfaF!>jhzJ5?dsyQePhwDyh;6Q$L1eKPk zRJQu&!xAxMf^Zbke*EZ$c#Bz$p*yhviU~aMmiGL$10%8`U#EyG6khsO zWS^U+5LttEIBK*k)M_1wm7kWDyz-Y_vT7>M6% z8*oZ+Jo*yOX|em``p9^$=Y-OV!HS+ZnEX(#%&Q(mnON~(aPYK;!=LjmD3@#_(NpWO zwO$G&jpjm&-U0Auq+6r3^Zpa^Wid)rEpK4tb+!R$!+?%=M7V_<6-2lnbY1P{+*pWf zbr3;K(7pg)Wpz)HGrY7g`E&@#f|#JyoWC2Vdl@Sot*22W{Z zrbfJAFgbZW&Iw;%2KrBTwS`S@VZ8Ye)P7$Bp0zGc#q~&*qG86xpu*={?2dJSW1n@{ z%?r@4rM3^G45Vk=Aj#&-l+E+T%7&6=`$-=zg#G0VgGA@Cp=z z1r3GL)IFXBs+KZC5G1zS!l?#WN|35^faLnoWML}dlu|bpYGeV z8LJD@P`Y@$B@kaL@Td3Xp#--PR$dX(zI?yc4!NoZ)ywA3|<2C z7`+t+DY{`wHDD|+rg2+`0opp(6)IodMj4eZUooMjIp$-T%jzI`K`CRVd#SGQ8`T5|0kk3Z@bDBkb?h!ecVwwRCW+O4Bt zm#e%}jhk_)%7(o?SoI!@Ui@odHl<%nnIa&veO`2ZRDh!L7lFx|E{O~ zCR28Yxk_c!KhW>fZK<2+amC2<8l?;MgQ*s>@Ux`g6+U6oi~-^kLan_Bd@2r$0K2?} z)NC}svuJcFOs(bCFCl~DbS_@5t_6py{zma13lEZ)FS2{C1+3tjt(xvb6bKmNm92M)#Kh<(>IEd`ApB{}3bsRB=kXS2W>b$B zppDAyuVP6>WU<=0o#QfE>^fOuKwc(Z>Uc47l9ou+32{*k}$Rt4)eV!u#%t0o_g#r@>x zWd6IG`TM|@(6=GZ%Un%WcI4C}!BB9Y1UI7_Q9uD30b9b+105 zy63s<^VH7JC;Zz_W_a+h3V&vE2xpfh9MpJ`)d?$a;y{{33I+engFxB;hSqKxGf^Lb zI^z5d4qjrD!$;gG{n$^@hMb&Ub?8eDg^pc^w{v(lxOchRp9&*3dM;=h?3bQ^2OkcL zhq>^8^?rZ;!2CY4m61FTi^HvU!V1fzPTcsW#3E%S_17Zo9;bu4>m@;r(A<9aKK1UC zoB4t38)wyC#TNx39_H+oiMg~nXr&1ws^=kr2b{;r#<+Aq9%6$0mMO9XT${k8{}uL_)_H3 zD)&XpF);@<(N}?b0VO*G;d^wYf5A%AwV zWj^#sSu=hs-v+_9(w*QtJss}?;pm@&Y?Nh6IgGQlGYJprSM5#emec0-mV5@3bIH-%JY>jW!zQmdL}UijMGQZ1r91vGN6s1ADq>4qCX)AAbV3`E`lova+Coa)3o za_8+M?yx?9xNFwxSWXp;$ej>>d&fBv37|Fitcu{E($4!QUV-rPd+;rO6S5u3X}O*O zIMXw^zIM3m-23DGW9O7qsuJ)*&gOv8{eE%E%`Sq1ehtL$a7cbi^1#v z3zPqTi-W`h8r#D+swd_en7Rjempk5S1yl~S50Kchp7BzMQ`8gGPi=1C%Xd& z5y`HUp^f?U%Z83{KvH{)FCAf*yDxf@b^&s&tOT04Swn_)xJTb5`eq zw(1sAGaJ_uCNiV=kSL$9G(-`|p@d~~Gq`~Kck*BcKi(PF=FF1)yp3|#aUAr|es|9fAy(9=6bt2c57d4fZATdVpVC~3 z52eYaj8=27IocinT=ILfY!lc5&em@62RWBIbo7DV4Bg}|5RVzV0;CchBjeZOC?mv{ z_A9R|b-05@5Ls?eo{FK(Le|lLH4OS+qvZRdJx)`uTs~3bmp#YUIjFXR;ePH(Y6qLB zAdA@sCVcD2O~U~Y(QA8u2Qgot`zeVc+4^#i&}wV?s#{!uMs(EW7~&V{GH-40kfbh- zJHNiH*SB7i&%comQH66$LNp+ap5ISiK7sL^q;~Xq;_{A}g0b!r&}W`2auBK)x~xrK zi}XsH)P`Q4|FUHP+@5Vt2A(`m?_WlnV3LPdG9Sgs{)C1zHwg!{UV(daBiA}@ls#4n z6har(#m|x#Ul$*@Q3JGM$v5nB?@~=Tn^UiB;4`S9h##!NIG;&f@a(Jc&*7e>W9<=R z8T4KwAv%A^yp8eL?Yvvjp|B~~OK!;lx>)H$P=zz;Rpu?2L_^7?Ea4* zQtdwI2eEzw8)-0jjf13I_Bs@r#>K!5BS8lj5J#RAgRn-gOaZ@z@P^}~mLuflx29^d z(8t})A>8-Cfh{e5e4gGMZ4=+I0xih|OIk_%>aTSMpmRxYu`Wa9U@eda^E`P2n9k{c z4;rp>`xEMUC3{>qWslMp=RWR}n_V4d=8h!~x<9nQjK(zf(Iy9j8{fS)vI0UU_RS`KY7 zS6Sik(;}tUMFS41OO5jw3p3{p!v<5i+a4$b|2n}ef&t@7&B*A>e31fXFX#&Y)2|=Z zm+z)=-E_#W=--)F<$A-|g& z#MncoR1l<+ov?qRfU#(olJ_v!+0~^Fo8b&cKd`@)A;_ft;^8>RB`7PysX$wFrMk+3Y*8X9H9ob@*Vv;(;+ve0xs7Uv~XwW0$Xpj#W4I1j+%TM~0 z4!e&T0eX%^1!n3Dcsl?8Tr}9Dp}^xbJ<}`*6_`pPQ2gvm+)2ID2RYRrp ztJ*?ob|=2L=~)u^Uv2Q5S6mIoS<(qm^Q>SM+HhjNjMpgH zGJS!D5it%JeDv_({iL4^>ON;D{nAn28%XA@r1H-DGZHQfjD4o!EeIlxw4Uq0F}0ZD z#|B}i67a7y~A;I?d`~x)gu3z zoO?4Zs-L9&!{82 z50zm2saIYSfW74gHy+q2g9CJWgmQnp*Nn?>k4*J^MGLtFkr}bW)4Rb@n=$h`=wD7f z@pa)N?b{`K{Z@)3;pN)BE$z3>Y9qdltby*^{AA!LB%z>LvVWVm=@~cnl8&=MYrsRL?fE>zfWJJ+p!Sy6YB?zHr2ax>(zDY4yZSPk3(-ss7gpZ4h+Br%{GLt8UJ!G;#PTkKjoNIr|(z2*q zcIToKfF@eQwX~9%HY;7Nth-n^I+_T`ruA>%NyVKrHHssn$1l3u`dZ4mhSlIu>f_}i zYpNF?U)gEND6EA30V)1d;l60X%G3*ZoRa6+AOCCJ$DkCx;n-#>g_CN;1<~JQ!mJ7Q zxZGT2)J+OI{pYE}?3^a&;EONBf;I{Th=fY*FQtoB@mKKk+&#~9Gph_6w_A5il1*I^ zlM+xoMQB4th|U`)#p!m}gm8E>Yq{UV1%h7NmZ^Xd{X7D1XJIdsq%H+d1My`} zGq+!+e;4KhQx}F`*F#W8*~U#AUqsfEmhqI5g;!+F%#C*T;&>NZ&}CAym}!SVcT(*d zlzt&Ttm2BjMFgVJ(N$Zl@-B7d<9``gljBqoTIt}PvzRp&6(8NB_)$K}>UBrI+2PMg zm5Rn%I4othJax(^glPW`n)jZ|7PG7s>*$Nt#6EVi^5-ii3qHPy`vZz#bUUJ}pKUc@ zn!uKDQIw%?P?k>Y39gyhl97#+O;`rwHcK`zzkazdwNv|o;S7s|YP5xs+uy#R zqy1uDe|Hebjf3%W4%%P9W>sttVt3xZ7e6Tx66R?L+|F@4iwj6>FqhnIYwFzCt;`0U zvd+-el(-ya2=#Fhw$#{`bf=fv@S!6c!1QN6aGppm9mKSd2FQBdb8WDnS~hQ^D zqUS8BlLa6%Ws=eu^X30|b!j+i%HlEAGZwDp!LiMD8`WJMsVYCULI67V7hf+CU%s2Z zeKP7ilbDF9Jir!roFrTMi-3m%=Z*~>zP6eN1S4O-cVH5KcB|dIg^V*4lsAeYd$`fd zJ93aRCc3#V5sG^CDDVgM%S^qx2T2!eG ziP~ryVjvAMX&-wLTA&_B4Cf*keV$4jf3JXJe>ColJWg0{m`ATcx@CU6=13NS8d`Z% zQU_8VV(Jnp@nA6Pl>|PG0lF(%L5>JAtUIGqlMEM|*))=3X6=AIbeLT_yUlLi8u1+@ zxfK_v^0B$9#GAy7KxowS#~tENpMWQ=*sO9X zH|)EAm)An~lA+3q#C%ZDJ1E5MD{2pt!!VI8VpiR$n8mb3*C=e?s|5JJ$mPuh*7Q}) z52LDiPuE}_7p1WCEgCyy4}F7vEtU`N{UGNC+$%swo0G5OLn!uog735a3Vu~uig9Qp z?R_7+itc93XA&Xw7;q?{`x#w1_@cUJKM;{MBU|~f{&{sb;VQI!N=vlYM6PmG03~6= zhk}e^>f+ffqxA}L{RpR9GrtY%TiqT{vhCs)Vn%>W8VLm=_e9VFU1_(_LE`;3O(c{~ zt}STA85y3w_n^b6RdJ8)=3SpU*XdeP?})X1;91)ee;z9x%#46;jwLszXZ%qpclB}C zJc=*VMdf|7t_U~SVkr&D!=IZp0s*jcnZGa+v!#Jjqr^;&i|3dDY1|UH?z{BbGx!9w z*(O`IM0yY&$9sXLjEpx9F>euGNebQ(aEFmkU19n`8#z$=>*dlb@1}24O%6uJ^+{1x zN-{{YhRvAlO8!-pff51+%5578ydzo-3189|#~V1xCDdiGwbFz>-5;T?0Xf;tGE3=2 z9h~gpb6>y)G0EwxeB@`EzS3Zb8pIOK%4b}wsSq7G^dQg4wQ$rtiEj{sQ_NE?328>> zWEUT&eaI+3z|RTD3@sRUu(mzH8gZ_B)fX$(MyVaC%7GdgwYD9Vp`$foU5 zST7>k2Au~QiI~fGjr7yc>E5hR7GgzqeH<%&;SQM9MUZojsgECjvv(H*BUHx*MhH10 zWMZd}?jUpJq~xt6nUBPdsY8qL$WM*?w;;g2L!}vmyB}Yi9kz*1vn_N)_JmB$&Y0a%DH{$Y zNCrnhJlRCv!A=EqArfgSzDD1g{cuCaGGtctAspJmLz+k+TC*LcgL{9-nvB*p{~%hr zKi&ZN{)>jWs^9R6D$~qmw_uoCM?f7F@=aBL_;hXd+ONP6}iLLgvzzXU0g6Wla)0Z-6b_ep5(*l1E z$_Y;#pnKzwy;qqA=EGt$Q34qq5Ibd9)gOs{U?HaeY&Hrq0diWU421M`=4K)|zhj`i zV)SrRclNzTyCBb-0I`Q_HMeSkg$=MmNq>c<-T@6MT#L$xtAX1gi3qwkTN!cQy8C|# z71J1Pe_=e6^XNlP`3R?v1)inR)nF<2f~C~nOF+@}ZDF4HR`&~zoPoXX(5%ijcD)*3 zpk1%APMS@hNXG7xcmsmfGz+m*#;kRNSz7Sme@oMk-Z1wN)se<(hORl}rb77UGih8= z1P@A>wae44=V`me(XIPhFiSIlwb%#fuy0+`SGqy4Th@*QK>ODg3aWQeBrdP}&rRdS z{g-iZE%8jeEp^~VCsWx8avViAkJ(6?2l^ShceL*8;)a<6%PN^HVQ1(F@gXzC&RIr} z9;=b%V1J?Av*VvgzaraY6z1o&j6eEO6ZLeJw(5_w+-{5IxjT66VQ6*VzIot!YDqG_ zfZ*o&9hhQE@F0mmw@X5H`E)1@dzFX?Y0UsU=#^aN4%S%wd z0x1*%YM2^9bsn?}a75(SMf=m&!GpO06}m~ftsO=kYS$J+z_kXxp-)k7+-7}x3;lT8 zPTLbcpHBfkYYIq{`m@q=S`s((rgD@z2ln~KNI^bo1oK&GvVqEQX^s!F`=I2%jzSqo$Y5fUp`1NMD$N&?*&hn1=l8=kNJEwrw!D;}? zw~_XJ)R_C@5ykwkKp|rTY22cByZSVTI}RGeYo`LR2KHR+h{T zMr|=DB*uY_IzE^>c+IYHI@|EE&{i=yZmjNi&U}4LZ{*+@89e^SMlEH{>W!C(ac!~L zKLaJ)LAT3xiums{PMNl2pwZ51g!LflCQ-GkkAEobsIkat=+qR5-M+}>#&>>=@Ar$; zu9)J5{}@eW9Uo``MA*pR;Sn_vf?K0k=)=t6-^@mWSmo50;b3s200`J>9v@Ag+c*k_ zNZDWM0*qXw)gjcW0Jj;7vtxwZ9gK~bIJo-}csl-#J{{z(VG?(M_;W&P-UV_gAhqrY z{dotBy#8=Z@6qf;v=9ohqeUMl??c%z)cm5aw!33T5>289F!3<^wsqiQyBkV$n&rqK(fMH`P; z5!ivIJ6L+_MT2u6t5|gD5PA8bZAlVzSmImzK5}m*@_s}GNRqPh+3w#1s%5UQuAnoX zLKKX59|Q{_X@>TVUw#zVOR67cT@$0^QxNJ+85B&e?jOn<%b3*Rc9@thVrBeb5rJ1J zc}i^#e6p_0Zu-Tls1(@LMPSCD%dp}j$aZqxv{ z!1o$*YHj;gu-NzO3i5it8n3ae3{D1rk)8=UBFot#u4%o$2=-J|txfFmqZeukib{H_ z$|u9FC5O&5ccet7{M-{K{mxzGPmd^1V1C;Y4)>fYTfDONptXtyxKMyVi5rZB%i5x) z8KQ5H4|!Ke{Coa%oGhEI0A z1A}`L{w5}(MrJlwETGN`eGT5ND{_2~t{3+`jkQM6Q?V{M+wI5Py}rJCqxp4VK#5+2 zYJ-+_pk2W5wPMa-EU-uuT{O4>ujc5^%0}dKGa_;~m8JEnt~6BKR%Z_MV8xr`UhD&H zT(XfE0Cd`5a?L$ME)5}|8mWa_a?Tp+LH=s;ct>%2g@lnDUI8$AtYj{b~c>~A}Gd7>P1Q#&|n z;qwc*mBa4O25D&f!mJUxV5eA%v-g&)y;v z4XW{|>$_!O4AF3357JS|jm|L}Pz{W30xt3?U>N9*;zZJ_E~^eKlhZ-AO)%VnMT&}g z6#y_hw4|@SS-=mVz$Lf+Sp9qML#ZoLlWrPN!@j1&*%DS~^-`&0EodQ%jAp}pe92dW zSQ*v!9&lsjHBGiKx|&RZ-6K(x2k&L^c7(s!8(P|LBZo6 zbi+)NU6@EdQt9YDuZ%YOkrO`vE)}71f8WftgDoLT(bGZP1FL{mgBk#cEY;G{(vi%_4JD zg70Hb;c3*WN+pK+PZa571cn?1^$Xt=mumfA&%o1{1Fl46a+O$G&o%bw&$R|C3$A>C zg+=bC&dkRz?((HCPUjuJal*O}%Wbs3%(i%B zhqnclIvO=RljAU~`>bd{<6fCmk(dT5da86#9>tsK0f=Sett3t@Q1^QUxB!LvDpppM z8a9M6n~hSdOp_GDJ|T`<3)3Zg_%zhQI2A;#U_ilHycAF;z#7+@e2f$*CwoCa`fJrS z?X&e&G+S>2mWq#Sam+Om20$ae11X%6Hu^-+XnGzqtt^(j{GQz>pnC_3FOB$#=EOi# zgiE%J7Qo|R@?_m6ONS@pkD|BTwT+5~z3N4PRcJb5v{y->U^YOz&gU<|exDV#~sr%bYa%M$J^SjcS%@=^K?|iG3jp_B zL>`2{(xACTPqe4*qyVHc>7BQ^4Y@g zCdQgQf}?9Bb%MvF+hYr|=M?k~xBvqC%hxmV%XibbCjNeMIJN0wneaZTb6f-?0Ho%hZ2P`RjPw|C}kRqM6?-BS1Fg)WK?xV=)muKl}()y)8bZArQ3hZuk z8@J0mj#Q+R{p^0X^%AnqIy?X2uFNn!rW@CgwfpEYF~3&c^gcXv__1* z$ZW=M#2>4xFzPKQ=dGD@m=AIy@6@7}o97Iv{WsSDpJGQLSkwCG`hUw&L(pizEfX7# zB zop<8en)|KhG$fNFGmk*AKZh}t8L-n_&X}jTM<*&)OwU3{> zKJ|!?TLN5x{{$$WfVz4H73nfWa!A0fI;nKIXgCEBO^Hw1s4JZ~v8*v2+=Mr&WukB= zXK^_W&{M*#_D=l+xCVtd#61qc$MZ-re*=FvVBh-oD@1dJq1*6Vuo-8&S0_au*C!@- z+Y|YzU@EuI3y^K)Z!6gb+#y4bPI7IPHnp`kwCO;Oz;SFF-23pAK*EaF?+|RL_XVEx zJGAasjDvVy!1FeFcUp&MR^8n?2Q$^iIauyPtk|t$c;8tRJ#KcZ2cQRfHf9^|!1x`x z_q}Ek_n0l~L5Qgn1U72wFkk7?&cty?0Ww#)m1dT6`jef;mOJXs$+fQmVo&uEmx-3uC@+6!b^8|s zR&z>UdlLG>Tf5O~k&dRunr3f&v}o)7_~X#l?yq%SxZ{)A6U?74fM1*}04>1C=Jd!G ziDpbX$>f_IHFm4qRY>X-mhU}9)42ifrQ(;?J0PlyV{{*~R!_>M`A4_lX6K%1Z`Ql7qJs9uaq$!a9EYIle z?B1?BiHmC?9k)V9`YnBrMej@4iO%LT`<%Oq1hz8z=#<0r}Gt*R{KTmx~Y2kDnkIxt2k!KEAOdtVBehW{L{myqQfz;#3?%M3rp zpyN3a2}e@rXJ`w_1jt5f9oZ6k7+mqTC0xiAK)k%S58|Q5JGh5h9a*mQjs&Lm+;&Sm zX%{3^upFCP4wIMvFjeeJszL+{QkmZ>eW@Q#i6T)l1wF}xl0I-G+d!ue^(XBvpnAz> z18-jYtEAdJ7;Ck!Q`*%1A(KTYv8*?Giv}RRtf_0z(zPKfWXV(v1}p6A#M$k*tbSy&CPL40%boHzUs?Wh+D>LXH&ieGu5Ykeu+56> zcGjJa3VAmo-^HxYGEYA$6P_pUlPP=zRDh|A&6+&Ht{~5R-7YTt#r6#GQmwy2@8Ug{)K*um*b_qY6f}eNM|4o{B$f(_hPj( zZYgy@4)Hanq_0p4xF9dPg&#{0_FuMPdRH*$`j1*?7#$elffU4I5W5wB3?31a3+^%> zv5b1(;p_1k_7Pts7gHj!Tln))gV=a?2^ys}XZ9DS1Ec(xF+`gCBkBec1_`osf7Bt9 za#IUa9S??d8zE$$30%+`_}8(-*@fx;P~LN+?=*0|MAtbA?f+j)1f~y61Em`ET2S8l z)Od&08$ImloBTE-Iv3;FM%Pvz00}M00>pO|!(vv@^a}2y$G%F_U1te9xon1}5Tk9< zx>p$iod6hv?PhyVXBq^T!vB+fAcY>oBBrpFUPka z)>Bs&G~-WBsY^AZAaXcUBzxaN5Rq#F5s}etc`l#Aq(25yoJ&BNJ!@OgZCD#}WDvEr zNACz;r!K+$iFAiclJvWwoK~Z=Tmf*F6WRLM`q3s5s`MwYilKE_a9=7=F}`iM%mIky zP+T_P%&h|Iti+KCMI#+3Zwc-%h}Rp4WQxp|naFGo?_dVF$@bma3U2QoO`GVUP0!EiDE0lt+D+yp9aG?(sj5fWzXnI;J7tJ8q5r<2*kZb^L z*wW4+&FYRkKq&FEiju1GpHDKRq_hr0m~=RTAx`%c`{v0q*Crk?8H<7R7KTBxo03Fv!AzJ!?_9b3#*YZQ%_s4N}6GGHJn2bV0>s!hwp|=LF6HA$H5$RpmwDg_| zo7!r?29RBj-LE(Z#Ovxw?v8Yp3$CyN{rLRX)>)n*m;r|0p6sFjz7{o9b@5o86MO^O zozFjQ*th9@`obxFklAMCbsSL~1UaDB>KRo*AdYzMEw?S`Y7#cH559d=s2>HmnS!ni zxXnXrm5;brbq@8Qh?swPX~hQM&qiZxGWxS=k{4C-1wEW~Ky`JQmiioZXgemH$4U#c za!4z{J$4X5TN*=61xJX-hu{h#*i&mA{s-#wUpnQ~-))j})`eG;8Tgk?@*k20qZK5r z1EUl48&gxW6L9yli#?lljYjXQ0ria}0MA6Gc<|=+-P6|k&UoYRN!08b9q{dH0-ePp zNc3Mji^~V26eW=x!IiwdP4pG746LBItcmn~F@=P6RXML^pf@6g=%aWjd|Nq&lXX%6cby z>o5Kxwrc^nWaaQ(^{G7b9oHq+VG8*d$Af8UYK4X!U(;9B|CryEybxGCc6b4?awU+7 zo!m^KoUnnv0;;Pw)K$}WKzRk|s?P$~AV{6vlk=P^I5F0&NJAcoEJs}?GM_7K;!3F+ zS3k~Zhk}(S0}U+Kt(`{4cl6ek0{H|9p7$WU){rzoPPs3o+he`>UYF5AFzF`fBK}-= zS?~k6)}Y}}!?96O-EwfIYDEAJ8+!fAUOj&qt->CHL1$x|9 zI?7}h0NQ4@iwqxG2-lJ8_3debAj z;3R!=gT3LYXHYKN+H-!*k2Z!7TsQ$rLb=aEBkOhokSg#?tpqBmxi_)}(%D1d;Y5 zu>eF~A<;@}s)1X@wS1jq!8ZUsmi!yTXJpm?psa4Dd-0RYh%50;YK9?vax(0&$z8JM zAV=&>$OMo*6}=>Cq`F7hWLpvpt|`j+H|Q}$p_gO_uWf7=O5myqTbY_AMq_YpNr_<>T^^ zR?p2y(Y^t-JwC&8rTc9JQ^tRvo@SKG{|=7n&rF&d8f4nLFi3!>L^mg5G0lnzRKmg&aXY z3_MZaMkDx*KyqL_plU!kp38k^SPSlnh++d-)H>5W5kXru@bFNbw7dJqI)>)1#1e>m zKGVAA8JVR#cjjXI=CL}Uf~0139|Xoym-pbSvqOywyILjGXXn-{n;aVpz?HGqTClw9 z_{hGA?}GJ`qR1>tG<+Huf_zKVz2C{Lx>*8#g}1J-^ah3HXr&D$A8C{4in2vB*iQb4gQp?&U+{2Ue zzDQ0SJTJQk6yxuiRDhBqlE<}hZF4hhHz^U%s2hBPqsVeSJ3x zp$@r8;=u361t}eAV>J5;f98TqQdozLUduqGKj3?ezsUDym+W=oD)3giFCdl36?brD z#>iafk{b5HI()l=eqClLzElY3>zxggoNBtMH6V>VGkk5}j9?S+#BlPwr_m#*3mTWG z;tZ+NIrC6=7HpsK0y7}N!EMuM=nSAKqyF`#@Hg7v$SkWBfuwtDc-=F=pG_Nl)|Y&> H_tgId>$l6W literal 34133 zcmdVDdt8&{|3B^_HAAGbBo8>tl6N6co)8ew)W`#jGjZC|5(0#Q943QpmMIk}mFZL% zQxV2C4(jAM*h)gQ!KQ9=;usSVCiggq;|4a^_Pg$Foa+7f{PlhR9@sy(_Y8sSdR?!> z^Ywf^uOEH9JuP2b{@Scrvn+RizSD2ktl2TMX1%rL)w$r4ghK63@L1uqFJPC!U;ux7 z)&r+x-=uH(_``&EC{52EKYk28-_#s*1^nH@WIu2JS>WCHpVOQi@vK?jKi<7_d%%&| zy>iuWm%o^^tG(g9n?=LqC%Xr3HEb;BwD=dw_P_n=f*7q@-0s-1wpbc&cH4RP@SPwtZa}-NEj!p1{usR6RiL_IP$6Z0r!a6vd;3!u>^J=C6B7mNWkKXuCjI**I`=&NqL= zxz5^nw9anRw#)UG9?bf7kL54V_SQU@H5wdq)aUs89|B^IeqQkZ{;{k6<3+}G9@D6m z!qEW8gRCF>@xML>V;R^no5J>N)RD2)bggtCdK7#KZNV9BG_+t%o|aEq0VkZ_FZy#) z`_>N}InfW}&SDmjBfiLXb?Y6fQdesfgPTUQ2Q{sVeQqI^Wc{Jaf?H$aMK3bi^;Hek z9I|Mv4Se%;6$&So(jaGrj4FlCqhv8bWT&B;pfd7hKf}JdG@-rqx6W#9@G|{aOFX3^ zQr~KIi95z3f6VGHmh2r+-PF&4Y2cq}?Y8!J#AM-LMcJ=5{7le8W5~~XkViA^(F2)! zpjR7{QmtcsG4>6fVeQeQgFB?Y24oe;ZDh6e8LbffJFA9KI=2En^0k?|V6qp(0M^OY z@Bet*5A(OG|G3t7mSt7kf}``V;tS?~p1ei8e6;uTv8wtaTjusk*&(OxZQc>Ww$fZ7(_KMthMW~%s*H_Asy>Xy zQ}sE6m+wxBG_3Sibg{$WGpSeHS1!&Z`V$%3gJtz0b=nUjvvym*F7a&s#k#Bk4z26r z`r=E1h?ni*luw+A9{ur+Nm3C}nZ+!FL&Qu&<$paR;KS|`Mq}bi#ea@QJfbbXcxL(P zK*sF%z{Br<{GKH7*Z`LGOxhNtz9p_pYsuuNmb&DU1B)dP< z_kz>cccycfBzyj~m$EAv z8S)5nMav}!O}ts0rI#MR21O6bQo*b=PC|>gLUe7vw=ZX{Hmy2JX>VokVIuLF0a4v3#Kf%B< z_wNW#mL+qVQ&is2s3Lh0U0SyX-i8QKsD=k~8na$hb^;oC|5a};zjbSV9}cI3P+ zsjAdoiCY0R9Fg?P#+UiW@n!xZqOC80)?FV76P&*&``e-qRm2HmImnO|=KuXM_JgIk zTMe9nBON^-xTJp%Hgirnw5skp0US9L{P*9!F%oi{g`FoO@bsjso572|8(DNY=c^HI z5jUI>$cwH@;wN{ZLddh=S5p6S=0{KkBK7s06ZVlk#|f$3sTx8hw1GGWrihQH-_>lE zc|}$NEdzCoY>>QgTW*A(vrn`R?xOemu-yF_)=gRXHdra zF_XMwdL}mcHuwN>lDN12aOg!_-UX=(^M4T7{%f%OKciiv4-)PAPqnM^9V((|;W3hQ zOMLu!K{1*_n4kLB7Jfv;KUaD<`Vap{ygb5p?-)(|0b=6ElQwHze#K>9!20S66&@^Q z20Oa?dN^yZ&Ju}*yuo!|HYpm9!qD8#vdMyc+H3Pul#(MTM<`Gbv;og z^hgT=<{kI2Z9Vmf&S~^@XkpLBB@`dJCQa^D@7-tzwG{9>yMN94lWC=01l{@iZZ9zI zc*MAsw(Cw%J*h&bzBRK6x~$C9P>f_%Xmp>-f?cp;l0s0{gfL5lpv-`c?!PNA3pU8$eY71$>3 z4_C2bjO9aYJvDCIn3RaZ)pPp4vDja zSTjiRK`qX#=Q7;yU1asP7h`m9LjQn0S zkf9Z}ovd6!$I+E%Lg6yzze-JWrZrx1J}l5NW`{Cn`~CltMk9%OFWT)?$B6gr9>1fZ zFmZZjs(lCA4i{|3FQRAHJnYN$lLOO8w;Ybwbcy|~480&J+5Odvs>`{`CkLG@!}bX+ z;3xMr!fu)LIDf1?wZvFNfxcDMjR=_*~wsY=yTlr|pzF#S_jUxq>`!O6E7|uxD^e@(GfX#Pz-7jY{FV=^p#B z+G4Bl{3Lonr7jhC?V`l9oSV6HC9?KS4=2~Y#T!lp!SXj_usm%HmYRiZM~cTaYXTiraq(1kLs?BGL@!r)(2m9Ap?Uh*4od%~8U9LUPD=FutvBtc)RzVXF2 z7nVe}c?YI;sWcXL65)veI2kskgX+Dw&&D0MYoa!l05Wbv&GaH-@@TtT>T&`} zo1;L(m;wxUuvBrjuriDMfqD6Lrd*s_DYt=oy9F^e@iKFsvI5e~0hv=u7^FII7zAC? zw<=~rAeFZw*y8pfUl-l$m6@dfltX0EnynHgsDYex8_|KZGT7bU6NpDOTD`NM;jb}qs?in{^YZ&yw!+Ra;@CD97AwPb3#kuR&kh*}McXg zBNIPbC&n(f{$;yT_FFW`=(D01e=eilGkXMeWxBpWxDh=1FY- zo$$<1NZ>~V5=b#w>MGsQ)UR0$CCNLcoA(as%Yz1^OYn&@+i^)@8kHNqZ-^h>(t zNPCU9NMpteqSPCo9NF)JZ=s?F2gKMp)_ve;9CAuSphUrZsvP$fT@jfmZ4@G@{Z|za zOJ$f4L0@Ot4Q+D(uS`r~so#F8?M;n$RycA*RR&k{smLD(465|bWczr!x^6*Hy!Ll9 z7S??Dn$GE3L0_ou90KxEGR+$zVsb2{-i+c-!3+3<2WQh9*D=w9 zA#79MBeu`(#eov84}fzc%8fNu=l-GlIY>%W0X6BDtwgQog}`)okm~Uc4WM_xcM!xm zYgwuGP(cv!lIEk!+KiVaG~fzX1<-I?NZysr{ox)5H}8Wrd+Jt_YLxe=?EOsPumvNN zUz@u)avi3B zj8!grlOmBfp5Jk9BN4Ca7%bdzx@8+{ZC9k956-#*&qyYxVDEU1MW)!=U%^ zFy;aDxB?D!lSR<3t><94;kvHI4`CRqi~Bib6Z~LM*>V`;<5uMb=l6 zPE$(+>~ey0vfi&Y!kvZL?TBwRgph1sLag}>P-Cbq8?zxDw|cMx>lY(AD0<%C{~>Td z?ISeuTjv%>zN6fo-r`jcsyCM-q|O@Gh!9%%)@>=WvO@iVYE#=}i5M1Z_*6Rz3y&s^ z73axHBTE*?hm}fLc6&P-u=nRZO@lN!3H2Gvu3d6hq-b}*zT?H6`!{zbLkY+>^cTO) z_LTSa%sDJyYV1peY+L0w;mPRzm2Yb@GX8AEoKLlVCRrlTs^8v|BEuC1>9VGuh$(L~ zGtF^#|QSpS(<+i}cCa(OX?F2vUPs?mhhOs_v^T zrtVa=>PazVL3{)jIX<%YVriHFLfVCPVzqU9#wBO8hWC@XVNzfU%&8?@%bsG8U@m)M zEFPR%Dfc3_1<;HclF9MRgRkeV1Fb}P6zEPVrmWv&5JoPbXH(|Z;6V}@VwXkt} z>!5n~s2~%BU++dM&3*uBT!Z25C{K`&dMj|OUd_n*L`T(MacLndsn)+JgCQ)sWH~4W ze$4v~gneF*^GoC7@%~oKvW*$U0MwuyMj1-|aJLKz{tSvif;Gq+4TIfZ7AEAeDe{en zHlK|06t$Gi&KhWx_hxr?wxmg1b>7gz{YG%vr_x{P7_8piCx~O`!=3zNft9-ZA;3K= znjQg&C|9zgwfS`L^#am&1pRws-)c7w-tcbH?>Zy^X}%{^-=6T$3BXcDq@p*JNFh}F zw61_hnnz?vtOc+>V)0=R2Y?pJ!2ZE^5dd^hSIe=%7Ct>VuPQG>vAHgxKRk~XTqi06 z0eAFeI{@FA4nTg*GY)<0=%62~^ujFhKK3=wA3%6LJbf4Fa?SomwNlq=zk2}R ziiSMOP`nEuyE*iuMttE?TLo}ulEdGE2;|-zM+$^{YeZxN{P`GgqNA8N<8(9QGyN?bS-}sma?Jl9tUU4ef>V z%Aq8kAJo3Sz3|xiJ81$;s_1IV#ylIZDBk?sRHcK$LF%22{W-8shAYU^a~2>q!PiNy zo3M)=qWa~j{e`kGBpltN5Vxp@6Hdvti2Q}`9%6=-ekT!=sSh=~qS0|zq{E13afVup z0b=U(UF;?PvrP&(TXx#qTr?7GDAnW;@6sqGPtx=gQ})DO3nXx*ouO5$qxBH%7bJz*@US2Ddi z40Bb&ORG+WdtU4Q@&x{$4v3{k?Q~maiS%Ob44B-GZc)|%QwZ+{H5X^X>Ffs0!Qt27 zv0Wo>aF%L#yw8PpGWNMDV_`ypCaY+6YA;F%fhNqFsxI!&m{JK~ohZ&4No6#AWe2~N zx6YQrRyK6*>bANZq;q`a@Pvs5kWcUh$E{3sF!G1G&y4WsKlp$%v@PQU+A?QOlx0Ia zkT-Y$`=&gg?Q&aLed++<`Snja7zYz)jQ6^!ii-cPmg+*TzEI}PaF+nqSaomYgT(;- zEY8!dWjY2z{Y6U0o10)o#Zkaa0Ie>r*w}XgUcJ%|WQ;uAiCQDS$#VE$vJ?Pjk0!`A z8QbgD*-EKUEOBW$WGI=QHcr0H&{}maV}T@iIoBOJkgfrQCEcayF>N7&=p;OKe$8va zhT_SDyk^l>%k;p}V@0-9BM)z3n>Upg-i(V<1_zM)PDjG6sT*QJul8_|kaSw|x`bv2 zyFr?)1TTbvu-5D#=qr-T-Et+ea&79tinb#67Eb|UymdjiD#v^$yCdTbafGSXJFTB0U)?Y;Y!bVSO_m}fi&flO^r>{(P z$@@01&rMExL|wH3#n4uvFX^wFOG|{2r>68i>>jR?7if2)Hn5Z!ymecORU`~8@FQOK z!xcH=fYqiAoc9%aGTr0HGeYHZ<0|8&kbOC%Cbl7N7&NZr^PUpAUU&lg#Z9r_HzLBT zZ_;c>>{N|(K=0uF8;3Vr@eHkjvO(s--LEZ*Pw({wNZ#H2_JSb!#+Ca|Z5I9cbN7Tt zxJAWLFMRfUXo|=eGI8=weHBR;ULny%1kA5G>Yu?8(Qq5TQNl4rvFRj0f? znV{53HOII#Tu0%;Qf&;V_^up&E&${iyT5t?I+D`+3{>Ha0<+T%t=q!VCKu@Q2m|ls zqQ+9p3+rfx4of6}DC6N|?zTqG2I;WfB%jpXsz0Axznr5Qc#GNY$ml~8xR zDiCIX8e16W#7^~*+DoAj7R?hrzo)JMQ~Rn^H8@85Bi3RvRhU>%@+W{assjY*Blhuw z4=irag``(Jj9m#Xk|n60_e%kkqCYdaj?)PPGj&z>m{v8wunVC%lUZZmitFF#eYV-A z=~ZFU5a>ZP7Y=Bi5e87r&#m(FemBD1@29z@=nq%qk-jHy6neyg#q1Y6O5vAl2OB-Y z{PyTdACq24hM;oBe59e?cRNTbxx^8lAnE4aiC?lSAzyZ!)*g{7n@@Gspp2lY>}oar1Ai4n?L|zSe}UOy-^mO_5B= zW>+MHdY2A2If9SrnC}83K)$UsK^EM9a6xBisjwE53K{i-)qQA=H4X5DQJh6Q`OtMW z-Iwfj`}Fp>se4D{(s&Yl4kYCAg z0A`i%P!E3lfciI7&o`(P3&ZGyGIWK%EL*^g8|_(AQ0QlE($c@ zUbZ;%8Q@0&Y$c>s|6&P1D3U}YGB2=#4->WnlpUjVHa3YwM^clwrjK=~$T?x4BHB@8 zd(jxa-)-}5ra$lLc_LtQplssbtA_C7bW6!N z_fK{3p#BFzObXYSYr3-j{B5-FwYGUX;T$8S)r9D-?HiCCeB3FosqzQW=U6Cgc-e+O z7J`PHoh2X;_u}&soHuc_^$LHaDF+r?;X@PH;K5K#zqUbKKQG$lTpCr`1L%J_&dsO1 ze`$OpCu~n$F8=gy$5en{vp)iDUU9WlRkp{#_XE= zO_?khTp)y;_jp3!pB!<#IR9Ze9q~6K%`sPVhjQM|Ao4+jWu-!&48@JUHHrAD2S$3= zKYtM)(V9l;#VBfM-X&V;%Z4$&X~q~+Wc+NvWv}$==vRQ!(X0NAu5UKjG@TQSr@Ld% zQllTq^;PbHa3XD+?s#JRs$_0+YU3wt&}ov|7JpXO2S~)ogidaAv5h#T(n2&MDR{da z+Hi)j-x-{T#SbXn9FaCrXA?j^G>$0HOt=k;cEB}1SlC_6-3tx^nD?_BhOvJZyT*bq zC%!+~<#0|POO@oF%xhz3je zs$4x&q7Ibm1c0T{g23u{P6G8DdoP$l0q8>|`yFOYw}_#{Rf_)9-j@s#4h*T+F>qr{ z)p*~jPBb1JWXtNnoP?NGcXXX`e5#(P3;tLo2(8O_swww@M8gxkk8O>(;5#kPy4_rP z{nvvO7afHj1}c+9T2mf#wf`GQ14yUIfyRl!fAaNbXwxJ6A|OKbZ_G#&Ey*5<{+tm= zIkWuBduVa}08jtw$2LvtPPBvIm~(=9Dp)N2mW`9rOZyCmpfbalMbkyKnTff@VS%8r zDbIyR9tvZ`kAl`;JSVSwaZUI7?rfT7N91r5dGUgXE82(xZn0(M?5ufTe?oLzazwAg zT{KS@PqYB}XCmuvFM?b^nEGX$1vux$krMrh8UPn*ha3&HYq1B*V*eZ~-$HfcEi6+k zwYZ%!k_KQTT_hj^7ENa2(>t*PO@XFG!MP4aIdm590d6^y`?yAZQd!8#@g* zN7g~2-p|dn*H4YKS1o7M1(e)Q>QEz~nLqCe@H}AH7?*XkyF3k<5(NKS_f3r(L;ERh zXNeXCELyG#ExFKL`>@D8>|evMGk6MCUAHA127qQAmVqr?b?O_>%I+^e+p@?!!kuwR z?}D!xXg%<>2P2_rUxgMPGV%#h0iU4v-tCrU;KQFo+%iL&9`WPlJ=}B2oPv)?7ECPgP7|*afEJta2n^Qq75fvo3@<`c)7BjdvLt_n6lr zFHqh-uqzF7!Fo+p6!7j#fOr4yCG+mtU{Idc-_Xt+2Envrk8VAju+y~$6hb%mZvoxO z!u|A)d2q_ZUbG}?^goc}UlzlNyU2MR2M}WiY4W)^CVCh!PfhK*J^?JMBwsE1UF!}H zu(>4nVQYugrin{O)5K-J?k#n`!)oSm&bvl_jJDBex%tNQy>@LY>05PZ;-gZ##zWmB ztfj9XjYtQ`i{XoZ*{eCBoS|lGB-9Z-GS0a(Wu&pafRo)b8_Zu2H^K>HLXX$>E!gn0 zx~Uf7cika4*DU7fozrh>F8T9g!AODx8CWo}vO&EB8cU_!S6dw@-e`=QH!LF!PZUi_ zy20KtWm*YW=U;u&9zHErOXZzfO)GWY*Sm=w!Mcj^oDnr;={x5f&hMLZxjrt;=r^)0 zZVv;jo*Jy<3XKB`o7#sga-~19pB(J0vbRyr`?{j233F1U&u0V-4gJhI-~Dh-V&69mx^`_`Kd|;5VFKfGuE582IsLF%LB#B7J8uc8h84O+eG(>WV7x z%chUl{2cDs{s3CB7|+P2^_QY4dIxhiPie{u6=QF)05*EZJ;{WPY6s@rFAs$?rxd53 z3l;J8-gf~?yJGtCO$l=|w7+CTO{_Cn@c?*213M@;I4fi9K`jI_}W3?9MB6F{)$i$I;5&$sp z!hi7&rsDo``5dkZVnw=?tzkM&?;Rm;GZgk*j=-LZMdX1GksdRrKJyZo zpIZTf+C>o5jzn^RPuOsWe=p@>&rn$h<+jIh!eOJN!)ZCvJ_75QbhElgBRlx;K#(x# zJqb$tdW^(S*z8iK4M4hboe-EUs{^YGe$cGxraD7Ux)e|mg~RgaGL8D4G#>a~bYM(M z1#v@0Rm3@8mb(IwdJdgh8g(T{9K8yYs%)vg#9hp3CDkP8Nsr`r(Q`@X+IeRQT1ONj zFmPJXEB>uNX^>tns?9DJ(hw;uhgi$^$!sM$Fy=)b70e z>6!A(^c^G*#P0E#IPW~~jHFQ58=0z1s;B$bM?R18LoWtI(G9l)_mAhwM=qtze* zJbt9>sq{xtwd@Q^pXbMNAjFUSN?0BOb&xe_T_FGavHei;r3>PU1JeCcWmA8SfNJGU z?-Ke%4CgR-|8dxd)GzTDa)2g8%6?K`8!-t2Gsih3crrgB4%oG(Co@vc#d-LmJcNF< zTLNqP#K@Q#RRj*-5`OWQV!I^})iCn6>VgbaM>BXqxU&RMJ^lxQuRg0mlnSzp-ikU} zs_Y7m%=#Uw!R{;3DhBJ50|5hs<^B!(ca}aM9FZdR^-J3RDe=^NLT2XCa6g7LBRKU= zw)7Yr#rVE3%dy0G!;5jgC|;@kEOp>ngWqLs9O%)4(%r+Cc1yp@?5DC# zBpHyr3`?^FF>r;M$f4_)^Fki#mVSr@TVF;zJm?ZF18d1LM^8XgJH?avb52W?)L z`rQLa2Yr8(SfuGdu`|8S5H`8mu2~?J-Hc0&c~r_1_KfxHF9@=h-A`q&Tm;p~cqjNC z^K3RF+}|OfX2q`RC&<$78%~ZhXH1cSGF%b?I&8ey@)1l5;LN1X4#{4Y3{q?=E)0?} z69{o_q;Ew72ih>14vJECWj<({yaJk*ynn5&+1O|368oE$7^@h1@|9QykO;5(=&>}q zwtuu!Tz_u_X6sZplFP0VP&uS|^%EjbVVjtIfA0i(UW#M+zk=mK=5XGOR zw|~j{7bv3==fM%FK2@0|^Z^|7z)DN{fRYOF`YQdcC~3}9SGzz1aGb1o(<8JpdI9wKV0GtY(+DTNar* zpk&h|mt%kWiWpG5Cz?4ToTJ4XZCVc*2OYr#3^M3AXE+^#WkKLOQUR-R`e5^vw;9U5 zeIH>pI@IGTi8j;<^57qSfUvRUB#=!M8wS5cZF39%q43zUy9s_sk)QN%1>D`&@k<#_ zd2EI5^b^`Pw?BabP1hF|_u0x9nHSe#SQUnky}C-#l_xw%OVdo;%U>q41xl$*bR^-Q$Xk>vHh*ZkJ zr0*gy>HB&8GW7uhV3Ts?cxe6eq27^3_!@sSfY&YcCtnH=2fhRut%wdgb?&IsS4)LH zL~%b&l0?xI*Y!P+SK|_|iJ3CYC3jMn)RFb~Ar~|@>W>`oEEx9T#iUP8i2f63H8r9vrcaG>%(?l3gw{p@L z0qg@aD)=>{{D2Y@@_Qg6KVVBZe8xuyXvZ%{===)t>#mkO`C!V%eJDwsaBCe{JnzE2 zfLHqweDCqk8*Q5Q36>0AcSXxOiS$!Z+2p492&@BqzSBfJE!>^qx+#wT20O&<4$cvb z3=IoGfpuVeRS&Wi*Mb!KldY@#Vr(L1XtBDoO``5A#yG4tkj<#eTx z4pg(hbCg1z2PK)rRY)r?))+=x;mrwzy1d|Xc7vTSG%Y~ctXIr*9b8mW^AIGBSI!mze zKSl|}^P#ZKzw>?bPR`6NbT^`DKxZgQmW2i?JxjdmDZ^k6c=Sa6-8YP^4%=QNA!_bW zJyunL^5)s+$y58M{6rPJ6G&Slw9R04(1Oai2T%(dk#5kRBIwtKpEDdEXA^HS&dE6S z{~`G_Uz>q)HF>JKkZqeg5H#o;1PwC9WP+BaU@AugX?-sxIccX!f4oTDs~SxKQpX@D z$1dmACijQ1f!9i_&)4*DSvq0;J#0H=8C-Ek0)$+$N|1 zs%|oog=s6J+uA>P8=!4EAlnJZx>E(zC*Ni$`<-qUbYL2`gZiidclpx z>-Jk)ml_;Nj_}Q)w&Ik#yA(~(Nfo45#Sh^=&uk8YM2D|l#5~Il&g#|hiE2A34>yp# z+N8WRWC@S)2695`NOtkozqpEJsHk3Tv{@`;MW04{HTTBiwu*v*p-!h~gwd6d%%e}u z)34}B&WJdXjTQ0*ohSI8W~AMr_E&93ig6hvqI3EN` z<8YH_iipal{E2lNkp3P@jT1fR47cWUsfI7XE=fQk(2#cDIBU957=|)E*bHrDS0?!=3@cO>w{2(%d!G3KD1Z86B0;s zPOK67e&cd(KXo#YHh@4%5>f6ZiuSX|nP9R+;K~XMdW`}y4WVwXAu*Ev^y5ejrETq< znAfv5rTsZT@uidv{&ll_ZQHul5v(a*o-cip(W-faDID4j1jZU)GBN=AvPn)!+%oiJ ziMRzIHJtx5Es-62;Kb64ZGFgZMEs6aRvZnO)9bA2{6&N4TmeC=cn%_+6bDlIh6s7F z*1rJrG4S!M)5DC)GH(fIf^=aPb7KcNHpT&jW&`noc~mcQwkE!$O^_%-jeb5^)Rr~K zs`zi-s59$W;lK#&Kc;rgD?dZwgICNp3zPVJ9k+7C%&fw8VVgg6`X;6R*8?u+7`c;1 zE4rils#K9p7uZI2IFL_5a?%F){q;tr;BpzmPSyLg=M%~smDgAcz+EV1c~iowifm|n zv~?TkwzxaauAI#}t&VEtIu`1B>At$s@$kySnZoM>2;PZldLijM@ANbZnVJ|7@J2i5 zTn}ZTd>tPkMEJMhxOcad-EnH+zxi>xeZ2Q7o)G(sQrh`sJ5w>31r!YnUovygzGOD{ zhM^}L#2R4kz;(lJz#o*hKTCQaFxo>WWsgQ&`ZmU-ieBVE9V9pS71IU)SzE;3yDPuQ z4a@K+wjxl%L{>9&dfjJ-$o7&T&59v#M=du_Ox><(zH3 z1Orm~Z_J<>`)F$fi=qTMdS%>Xj{c(j$coDFZG{W$S6$LxRd|=w_@m2Kf}h#Rgy0zd zp1un+^aPm4f<0jl<_MtY^Wv84pMf@1R@{~gD?@-h!`;b{=}z4`ys0N6m=S1g<7=8{ ziGLHBVsAO+YUPSzxQmS4aI*uiyNuCq1C#v_NK?G3UKqm0hg!^Oe2TP@6u_E2z3L4XMg<0p=XEfhiqE@Y6ynM5 z&mLVq^pRnKFWTi;JZR&A)vU>_4zKMMWHQl1Kz)Jll!Hhg4cXayH<6YBNm4K()SQ#B zITJ0N;Jlb8*mI;$4u=Dm?KD3A+m+{!qohh~N57u%*Ep&5+(HT>dir3xaZbL?P+qMN zL`3X2;64Zkt&18;Lb{95BVE8yfiOTj=neTzIEcQgj(r~eWljwJ!zdqeTKFXYrL(E? z3G`@eEokQfE^KE`GaxxTjhG^v;Kl$S|E@(jD1ml2>tVDmd>r#IV>`VJpcl^jCC_>pl$-?&m zzDvZ78%CWRu*lp?fbCY(_cqj-^E^Y{{q)H*$IE7}vWW>$muBB~%l;&2!&y%;V4ygs zyEb_hQl*N2n(rF4_aszFd=)g{IMYGG$+sEWfJ0mt1oqUc?V(nOW}Zd9FES=^Ebo;-K=}pt3LSqt1SWw1cTN3XzBYS06$wH8 zW+=e-8|dp_YFDYP;{A~Z9LmYkKoOumb6Z*GElOhG5w%O?3aXKVg<(Rg^ATVSG5d1f z_eKcz$`RKT=Oov}-C)c*HVCJQM26g(Nd@V=pCHj0K(5tz9Z`1i#;@x+ZW8(HDt{OP zhC$6Y5tLO^#O#7_SmT~E#Z9!hf)4kun9V?Cj-|`*1{5!ftK)iR8Hg7DD7nGe5MfG zMRoeFQLp$d9Ni&GU@Nc{S_c4(I1)aK+l(mP^aR%ovx?j!82$b<#rODl{fcqT08={{ z3=0D#3-l(llEnp%*f4tn7_C$R@c>1^q!XQvip{f_lx*&(O_yR z+sM-hUX`Fef+G-n%*p9L0R~LEu{dXJU-4bMlOl!141Adr-dsV`yR;T zwgU`8_>$SD@d}2!&tYeIMRk(PwXNx+Lw|wkSGXc#OTQerDX;p5SeJ9VbJzB!AeSOK z{^fuddMZdK_${(?G8A)ov_yQm(P*tr@xWTo+AigY&`EXNx(L8d>n(13(Tpgj=IHjQ zb8u_AviN=#VzeKyT19KdiUCU)eloNjIy7+;8p$+m(-xcP%nB}RO6Snpeg>CkAhQe0 zs=L~NG%e};6!+R$sd>gP=Sx-RM2tpNBMu1guxLwPlOR(J1*VPo=Pf%k)XySgmLMIA z8h|@(iz-*I;%QR{uDYD?O|9!ngidvJ)zX#oRlM= z$a|vM*O(rI01X0VMV7Iwh$~XouxyzmEVvAf<`jNq5D6Kn3?1Ndd)#5y-urHjJh{j^=gjYdr&lN$+l z5X=XPI+;`4$dzOK0C3NT!UuQu2h9zG%)F}DiIQTfGY(}>cgCvOtj=8kh4=}~-GGvN z${nRslyGL~+|4C0H*aAHuA``^(|!-;&RfAiBpQGVxGk^Q{0cw?={Ts6chc2uzbhYH zt+ik5`Tl}_px1&-Ds(n!{`x>d(cYMnA#C>e5mKMgxd;_H z%n85>8&qK8^wd9Kg{Tfer8jW{ka(kQ*EJlTTA3-A1VgU*fj|smO44w_aBQS&u>@rY zzZS1v8(!>2c~@}?fbrwd@h6%L`0Js=Jszt7N#!WF{;237;YV$6bDu*OPh5GH3YecFnS3l%v z566tS)v1sV>dR_+oq+NHP|Y7gk@GGXL7gz6r-;EH!+5DRZdfu#pV#tuRAi9)p$+#C zjHmCFB)1f2_B%WYj$x>>fcth(Q)?Cj9na7>8<9E}gdl>v@luNEez zxs%iU!Tft=y7%3jl(C+&nrG@Xb*qQ-b@TOi~&m)+|GwkvAVSqM=$w@s^&FZk8P$=Xh0(}-Ds^=k zNKPWfd<#CumE{<)f-CvyD!|+1JE+aWnf#vsC&`W0qAGaYH&$1?a^fy7^mtt|;0_<| zd{&G>E(#s)4f1Hv2momYAL2`FU0}SNbx*?Sx?%y4_HEeE@O>OT-sA7i*3K(H{1H*hZ>ut1EmU{3iS&lV`Xd-G=3BR?%+~xvs=9F?$D-tLoc`Lmu&xXP{kQ%*It*4!!_0)Yr^X{Pr1iOA(}tPnS{0LFiz3&=`hDgY}((lF=aeD{cR z28*iUvIDwV60h-263MjCTy_xdi+=lU{7isQ8{2q^Zgwd9)j189W6Pl$q(-bRwp6Da z*z88JxUJE*%(-4m*6)Hjq)))j&2H>3z}yrNxiUEf12nyMoT05GBNw}{y)yljXMI+- z4-RZYf5l~zZZ?!LItyz5d}H&SGi?bMt{B54&hZ$}A-CVX7gt|~2ACrHVqUQkb9)N( z`aa1W3C6dcz~&Weze0V&Qu-OG7eQ>T0}L+QK%XHv2S(Z5USXcG)VCUK8!S0Ki05u% z)ye0*@|a|p6qJ;~u0`y20A5=B8@Dtg9y1ia{1q8X5~)0g#K`LO&Lg0R@jFx<7O)8L{RZyDY`yhD`;=@oCBZ zq#8K69hYxL= ksmj0%-v8-?wW!s_;xlg@e}g;={I`3T_s-H!zx?k116YEaiU0rr diff --git a/docs/build/html/classmlx_1_1core_1_1_uniform-members.html b/docs/build/html/classmlx_1_1core_1_1_unflatten-members.html similarity index 59% rename from docs/build/html/classmlx_1_1core_1_1_uniform-members.html rename to docs/build/html/classmlx_1_1core_1_1_unflatten-members.html index 315608ca7..b9abd1948 100644 --- a/docs/build/html/classmlx_1_1core_1_1_uniform-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_unflatten-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    -
    mlx::core::Uniform Member List
    +
    mlx::core::Unflatten Member List
    -

    This is the complete list of members for mlx::core::Uniform, including all inherited members.

    +

    This is the complete list of members for mlx::core::Unflatten, including all inherited members.

    - + - + - - + + - - - - - + + + + + + + - - - + + +
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::Uniformvirtual
    eval_cpu(const std::vector< array > &inputs, array &out) overridemlx::core::Unflattenvirtual
    mlx::core::UnaryPrimitive::eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::Uniformvirtual
    eval_gpu(const std::vector< array > &inputs, array &out) overridemlx::core::Unflattenvirtual
    mlx::core::UnaryPrimitive::eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::UnaryPrimitiveinlinevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::Uniforminlinevirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums)mlx::core::Primitivevirtual
    is_equivalent(const Primitive &other) const overridemlx::core::Unflattenvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::Unflattenvirtual
    operator=(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    operator=(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    mlx::core::Primitive::operator=(const Primitive &other)=deletemlx::core::Primitive
    mlx::core::Primitive::operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::Uniforminlinevirtual
    output_shape(const array &input, int axis, const Shape &shape)mlx::core::Unflattenstatic
    output_shapes(const std::vector< array > &inputs) overridemlx::core::Unflattenvirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os) overridemlx::core::Unflatteninlinevirtual
    state() constmlx::core::Unflatteninline
    stream()mlx::core::Primitiveinline
    UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit
    UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive
    UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive
    Uniform(Stream stream)mlx::core::Uniforminlineexplicit
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Uniformvirtual
    Unflatten(Stream stream, int axis, Shape shape)mlx::core::Unflatteninlineexplicit
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::Unflattenvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Unflattenvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1_unflatten.html b/docs/build/html/classmlx_1_1core_1_1_unflatten.html new file mode 100644 index 000000000..8391af836 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_unflatten.html @@ -0,0 +1,570 @@ + + + + + + + +MLX: mlx::core::Unflatten Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::Unflatten Class Reference
    +
    +
    + +

    #include <primitives.h>

    +
    +Inheritance diagram for mlx::core::Unflatten:
    +
    +
    + + +mlx::core::UnaryPrimitive +mlx::core::Primitive + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     Unflatten (Stream stream, int axis, Shape shape)
     
    void eval_cpu (const std::vector< array > &inputs, array &out) override
     
    void eval_gpu (const std::vector< array > &inputs, array &out) override
     
    virtual std::pair< std::vector< array >, std::vector< int > > vmap (const std::vector< array > &inputs, const std::vector< int > &axes) override
     The primitive must know how to vectorize itself across the given axes.
     
    std::vector< arrayjvp (const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
     The Jacobian-vector product.
     
    std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
     The vector-Jacobian product.
     
    void print (std::ostream &os) override
     Print the primitive.
     
    std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override
     Get the output shapes of the primitive.
     
    bool is_equivalent (const Primitive &other) const override
     Equivalence check defaults to false unless overridden by the primitive.
     
    auto state () const
     
    - Public Member Functions inherited from mlx::core::UnaryPrimitive
     UnaryPrimitive (Stream stream)
     An abstract base class for a primitive with a single output.
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
    void eval_gpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     
    virtual ~UnaryPrimitive ()=default
     
     UnaryPrimitive (const UnaryPrimitive &other)=delete
     
     UnaryPrimitive (UnaryPrimitive &&other)=delete
     
    UnaryPrimitiveoperator= (const UnaryPrimitive &other)=delete
     
    UnaryPrimitiveoperator= (UnaryPrimitive &&other)=delete
     
    - Public Member Functions inherited from mlx::core::Primitive
     Primitive (Stream stream)
     
    const Devicedevice ()
     The device the primitive will run on.
     
    const Streamstream ()
     The stream the primitive will run on.
     
    virtual ~Primitive ()=default
     
     Primitive (const Primitive &other)=delete
     
     Primitive (Primitive &&other)=delete
     
    Primitiveoperator= (const Primitive &other)=delete
     
    Primitiveoperator= (Primitive &&other)=delete
     
    + + + +

    +Static Public Member Functions

    static Shape output_shape (const array &input, int axis, const Shape &shape)
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ Unflatten()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    mlx::core::Unflatten::Unflatten (Stream stream,
    int axis,
    Shape shape )
    +
    +inlineexplicit
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ eval_cpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Unflatten::eval_cpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ eval_gpu()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void mlx::core::Unflatten::eval_gpu (const std::vector< array > & inputs,
    array & out )
    +
    +overridevirtual
    +
    + +

    Implements mlx::core::UnaryPrimitive.

    + +
    +
    + +

    ◆ is_equivalent()

    + +
    +
    + + + + + +
    + + + + + + + +
    bool mlx::core::Unflatten::is_equivalent (const Primitive & other) const
    +
    +overridevirtual
    +
    + +

    Equivalence check defaults to false unless overridden by the primitive.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ jvp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Unflatten::jvp (const std::vector< array > & primals,
    const std::vector< array > & tangents,
    const std::vector< int > & argnums )
    +
    +overridevirtual
    +
    + +

    The Jacobian-vector product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ output_shape()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + +
    static Shape mlx::core::Unflatten::output_shape (const array & input,
    int axis,
    const Shape & shape )
    +
    +static
    +
    + +
    +
    + +

    ◆ output_shapes()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::vector< Shape > mlx::core::Unflatten::output_shapes (const std::vector< array > & inputs)
    +
    +overridevirtual
    +
    + +

    Get the output shapes of the primitive.

    +

    This is not required to be implemented by derived classes, in which case it will throw.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ print()

    + +
    +
    + + + + + +
    + + + + + + + +
    void mlx::core::Unflatten::print (std::ostream & os)
    +
    +inlineoverridevirtual
    +
    + +

    Print the primitive.

    + +

    Implements mlx::core::Primitive.

    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::Unflatten::state () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ vjp()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    std::vector< array > mlx::core::Unflatten::vjp (const std::vector< array > & primals,
    const std::vector< array > & cotangents,
    const std::vector< int > & argnums,
    const std::vector< array > & outputs )
    +
    +overridevirtual
    +
    + +

    The vector-Jacobian product.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    + +

    ◆ vmap()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::pair< std::vector< array >, std::vector< int > > mlx::core::Unflatten::vmap (const std::vector< array > & inputs,
    const std::vector< int > & axes )
    +
    +overridevirtual
    +
    + +

    The primitive must know how to vectorize itself across the given axes.

    +

    The output is a pair containing the output arrays representing the vectorized computation and the axes which corresponds to the vectorized dimensions of each output.

    + +

    Reimplemented from mlx::core::Primitive.

    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1_unflatten.js b/docs/build/html/classmlx_1_1core_1_1_unflatten.js new file mode 100644 index 000000000..0b251be23 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_unflatten.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1_unflatten = +[ + [ "Unflatten", "classmlx_1_1core_1_1_unflatten.html#a2d1c32eb1fe2bc7641ade600453c7966", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_unflatten.html#a507c22306b7afcdd5970cfaa32188f0a", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_unflatten.html#adfbb8208355f9c3cb2e4cb1fd4fe788f", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_unflatten.html#a6a89fc709aae0fb3e17035e39b5ccd58", null ], + [ "jvp", "classmlx_1_1core_1_1_unflatten.html#aa3da5fc9920581931d6f9d4236a6d8e5", null ], + [ "output_shape", "classmlx_1_1core_1_1_unflatten.html#a4c760c8fe981fd2ac17a31ff9faff10a", null ], + [ "output_shapes", "classmlx_1_1core_1_1_unflatten.html#a068cf053b5b0612fafd4a2d53d42f9fa", null ], + [ "print", "classmlx_1_1core_1_1_unflatten.html#a77820cf21bd1277c173305b72599bdef", null ], + [ "state", "classmlx_1_1core_1_1_unflatten.html#aeba13680064238191811230171365598", null ], + [ "vjp", "classmlx_1_1core_1_1_unflatten.html#a34f1218fa1d0e28f3ee10b65e6b0e319", null ], + [ "vmap", "classmlx_1_1core_1_1_unflatten.html#a0f6ee31b99aca962d887c856414813fe", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1_unflatten.png b/docs/build/html/classmlx_1_1core_1_1_unflatten.png new file mode 100644 index 0000000000000000000000000000000000000000..73f168e91eaa515600518e8a73f1dd69416d73e1 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^(}1{xgBeH~F+Z{fQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GWto-U3d6^w7^zV3Uiz{A$g zzw*;>`;VT*tu0IProJoMvQDCvtw8PAmim*H&;KcS2j#a+Q>obCZ4 zw>sBnP5RQLpAoyJu-)pq*XiB8bCsUV>3M48cl*<3-@3jY#cdXcw|w>9>lJiUZ_B*I zDOWN|-+a2Z$@{2>v7e;lq;D~)t9v$`ZktlFWZl}mZ_a0%uKp8}t=FA3b;+imTTTg= zOj?^9x&O+fCBiXLp(o#GzuwTfe(R}ZMNjv87o*I#*mY*_pLk6rbZynqe!oR3f29_x zdd4|C15K=W}*5KhTq7_uX-;`Qqc$5&==)7=}*sP{p(Af zFBh$S;qN;stIp|l(y^O|LbY|DB`=RK*#D|Xa(Qn4em^<3Z=aWCMDO?+_j5_&r(a8Z zc4zh$PA&zF0 z+}iIrsW12D2i?5j)i(0#H?yvUyBpr2jQhapir{3eSxsTGLo^GsIx-~DO_RzI| zX8UeG)V;mi`0j;OlP*|vPAaj^|Ht<4!u<2c!{V?0y7TJ)&(+hG#H(*nIqAJ03}FuyQ(y85}Sb4q9e E01iL8!Tvu$>dw=psZ+bG@7koYd1hIz4x71jW!sc3%ipaH`}RBPuAcpsUE5tvy@M=kqMq_u zt+=*tt$dc}B}ToqtDfGzcT4wC^4g+kk4y8?w_IagTmGo(o@Vx>Re^gSd0Pigs&mWm zoHYHyBo+OIs-AJjuAZ`d{*a+UT)g3wi*4||m5a~ru7PpMv*$={+pC;d6|aCz~iua{5T z&As2Ia<#_!waTN6N2{iaeg3&*MnV16rv~l0`TN=Y&2R09-llu^Z`98vniYS8p55K@ zY>(%y{;IUfl@%}ky4kPWb*(nYa{Ib4$;%dHLUG zi{4vx_sz?`u+Wxsep8lg|NJEX!SsJMaoc{axb`~i|GD_BDu3sI{PH;K>7366412n{ z4^;H5EZxcT(sbFi6w^i57es9oX8eOUSdb+DF|VBxB*i~z=FNFVdQ&MBb@0Ax?K{{R30 diff --git a/docs/build/html/classmlx_1_1core_1_1_view-members.html b/docs/build/html/classmlx_1_1core_1_1_view-members.html index 33b7a6ea9..4be46e8e6 100644 --- a/docs/build/html/classmlx_1_1core_1_1_view-members.html +++ b/docs/build/html/classmlx_1_1core_1_1_view-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::View Member List
    @@ -110,20 +124,23 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os) overridemlx::core::Viewvirtual - stream()mlx::core::Primitiveinline - UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit - UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive - UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive - View(Stream stream, Dtype dtype)mlx::core::Viewinlineexplicit - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Viewvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual - ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual + state() constmlx::core::Viewinline + stream()mlx::core::Primitiveinline + UnaryPrimitive(Stream stream)mlx::core::UnaryPrimitiveinlineexplicit + UnaryPrimitive(const UnaryPrimitive &other)=deletemlx::core::UnaryPrimitive + UnaryPrimitive(UnaryPrimitive &&other)=deletemlx::core::UnaryPrimitive + View(Stream stream, Dtype dtype)mlx::core::Viewinlineexplicit + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)mlx::core::Primitivevirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::Viewvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual + ~UnaryPrimitive()=defaultmlx::core::UnaryPrimitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_view.html b/docs/build/html/classmlx_1_1core_1_1_view.html index a26d93ff8..a758dca58 100644 --- a/docs/build/html/classmlx_1_1core_1_1_view.html +++ b/docs/build/html/classmlx_1_1core_1_1_view.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::View Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Public Member Functions | @@ -124,6 +138,8 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::UnaryPrimitive  UnaryPrimitive (Stream stream)  An abstract base class for a primitive with a single output.
    @@ -158,7 +174,7 @@ Public Member Functions virtual std::vector< arrayvjp (const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs)  The vector-Jacobian product.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -195,7 +211,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -225,7 +241,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -256,7 +272,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -312,7 +328,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,6 +337,31 @@ Public Member Functions

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::View::state () const
    +
    +inline
    +
    +
    @@ -345,7 +386,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -361,10 +402,13 @@ Public Member Functions
  • mlx/primitives.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1_view.js b/docs/build/html/classmlx_1_1core_1_1_view.js new file mode 100644 index 000000000..12141e4e7 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1_view.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1_view = +[ + [ "View", "classmlx_1_1core_1_1_view.html#ad7eed156c308e9a29a8b41f965ec941e", null ], + [ "eval_cpu", "classmlx_1_1core_1_1_view.html#a0ad6deb11914a242f10e8039fcb02497", null ], + [ "eval_gpu", "classmlx_1_1core_1_1_view.html#add6e12ff1e476fe1db7718b14f21b075", null ], + [ "is_equivalent", "classmlx_1_1core_1_1_view.html#a7cb8403a96a47cb258caac4e3b850f64", null ], + [ "print", "classmlx_1_1core_1_1_view.html#a513b034919a8a494add3155f910a360c", null ], + [ "state", "classmlx_1_1core_1_1_view.html#a37620f6548630bd2d0dd44e9ab084b93", null ], + [ "vmap", "classmlx_1_1core_1_1_view.html#a2230d3e5f434fb2b888de50b529ac121", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator-members.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator-members.html index 22cefc703..add3cc584 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator-members.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::allocator::Allocator Member List
    @@ -104,10 +118,12 @@ $(function(){ initResizable(false); }); size(Buffer buffer) const =0mlx::core::allocator::Allocatorpure virtual ~Allocator()=defaultmlx::core::allocator::Allocatorvirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.html index eac46e5c7..aed38237b 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::allocator::Allocator Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    -
    mlx::core::allocator::Allocator Class Referenceabstract
    +
    mlx::core::allocator::Allocator Class Referenceabstract
    @@ -148,7 +162,7 @@ Public Member Functions -default +default
    @@ -173,7 +187,7 @@ Public Member Functions -delete +delete
    @@ -198,7 +212,7 @@ Public Member Functions -delete +delete
    @@ -223,7 +237,7 @@ Public Member Functions -virtualdefault +virtualdefault
    @@ -249,7 +263,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -280,7 +294,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -309,7 +323,7 @@ Public Member Functions -delete +delete
    @@ -334,7 +348,7 @@ Public Member Functions -delete +delete
    @@ -359,7 +373,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -372,10 +386,13 @@ Public Member Functions
  • mlx/allocator.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.js b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.js new file mode 100644 index 000000000..e7ebb0b58 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_allocator.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1allocator_1_1_allocator = +[ + [ "Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65", null ], + [ "Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html#aa05c081ce80dc036f9d3dd8c195259d2", null ], + [ "Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a8e8ce346a16cf0c62847bed9289f9959", null ], + [ "~Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a90ad02c2e2a6ed89bb8bbf7b871efdf1", null ], + [ "free", "classmlx_1_1core_1_1allocator_1_1_allocator.html#ae963d551be646ae0e13df2c16f2beefb", null ], + [ "malloc", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a9a17d2c7a97772bf4a15e6c74af34ca4", null ], + [ "operator=", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a2e971b47339b1d0849a334a902a9df3c", null ], + [ "operator=", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a027b84cddc8d476f736ac1f1a9991fe4", null ], + [ "size", "classmlx_1_1core_1_1allocator_1_1_allocator.html#a2adf9a9c968f113dde830cc0dc27dcc6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer-members.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer-members.html index 7d9405cdf..c7621316c 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer-members.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::allocator::Buffer Member List
    @@ -99,10 +113,12 @@ $(function(){ initResizable(false); }); ptr()mlx::core::allocator::Bufferinline raw_ptr()mlx::core::allocator::Buffer
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.html index 508987881..41a8e5a66 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::allocator::Buffer Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions -inline +inline
    @@ -153,7 +167,7 @@ Public Member Functions -inline +inline
    @@ -178,7 +192,7 @@ Public Member Functions -inline +inline
    @@ -206,10 +220,13 @@ Public Member Functions
  • mlx/allocator.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.js b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.js new file mode 100644 index 000000000..cbfaed8c3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_buffer.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1allocator_1_1_buffer = +[ + [ "Buffer", "classmlx_1_1core_1_1allocator_1_1_buffer.html#ac4fc2cc6aa1368cfb74aff329d9a1300", null ], + [ "ptr", "classmlx_1_1core_1_1allocator_1_1_buffer.html#acb15b2f057568828ea09635ed968b62a", null ], + [ "ptr", "classmlx_1_1core_1_1allocator_1_1_buffer.html#a990643feac06961c5599aac098c17b94", null ], + [ "raw_ptr", "classmlx_1_1core_1_1allocator_1_1_buffer.html#a2dfe63e0b4bffeb965cdc50ad4228dbc", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator-members.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator-members.html index 508d0bf84..c4da715bc 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator-members.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::allocator::CommonAllocator Member List
    @@ -105,10 +119,12 @@ $(function(){ initResizable(false); }); size(Buffer buffer) const overridemlx::core::allocator::CommonAllocatorvirtual ~Allocator()=defaultmlx::core::allocator::Allocatorvirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.html b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.html index 2b6d944b9..d1d4952d8 100644 --- a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.html +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::allocator::CommonAllocator Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -154,7 +168,7 @@ Friends -overridevirtual +overridevirtual
    @@ -185,7 +199,7 @@ Friends -overridevirtual +overridevirtual
    @@ -214,7 +228,7 @@ Friends -overridevirtual +overridevirtual
    @@ -242,7 +256,7 @@ Friends -friend +friend
    @@ -253,10 +267,13 @@ Friends
  • mlx/allocator.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.js b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.js new file mode 100644 index 000000000..997842848 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1allocator_1_1_common_allocator.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1allocator_1_1_common_allocator = +[ + [ "free", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a84b50d1a3cbffa12c1a6cf0ed8c71079", null ], + [ "malloc", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a4f3d5de6b8c0eba22e9403b28a5ef3f0", null ], + [ "size", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html#aafa92e8310db089b1ac72b840777e26b", null ], + [ "allocator", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html#abf84c726a37df68345589b897b2e35f0", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1array-members.html b/docs/build/html/classmlx_1_1core_1_1array-members.html index 498090af2..5c5fdbbb2 100644 --- a/docs/build/html/classmlx_1_1core_1_1array-members.html +++ b/docs/build/html/classmlx_1_1core_1_1array-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::array Member List
    @@ -96,12 +110,12 @@ $(function(){ initResizable(false); }); - - - - - - + + + + + + @@ -167,10 +181,12 @@ $(function(){ initResizable(false); });
    array(T val, Dtype dtype=TypeToDtype< T >())mlx::core::arrayexplicit
    array(const std::complex< float > &val, Dtype dtype=complex64)mlx::core::arrayexplicit
    array(It data, Shape shape, Dtype dtype=TypeToDtype< typename std::iterator_traits< It >::value_type >())mlx::core::array
    array(std::initializer_list< T > data, Dtype dtype=TypeToDtype< T >())mlx::core::array
    array(std::initializer_list< float > data)mlx::core::array
    array(std::initializer_list< int > data, Dtype dtype)mlx::core::array
    array(std::initializer_list< T > data, Shape shape, Dtype dtype=TypeToDtype< T >())mlx::core::array
    array(allocator::Buffer data, Shape shape, Dtype dtype, Deleter deleter=allocator::free)mlx::core::array
    array(It data, Shape shape, Dtype dtype=TypeToDtype< typename std::iterator_traits< It >::value_type >())mlx::core::arrayexplicit
    array(std::initializer_list< T > data, Dtype dtype=TypeToDtype< T >())mlx::core::arrayexplicit
    array(std::initializer_list< float > data)mlx::core::arrayexplicit
    array(std::initializer_list< int > data, Dtype dtype)mlx::core::arrayexplicit
    array(std::initializer_list< T > data, Shape shape, Dtype dtype=TypeToDtype< T >())mlx::core::arrayexplicit
    array(allocator::Buffer data, Shape shape, Dtype dtype, Deleter deleter=allocator::free)mlx::core::arrayexplicit
    array(const array &other)=defaultmlx::core::array
    array(array &&other)=defaultmlx::core::array
    array(Shape shape, Dtype dtype, std::shared_ptr< Primitive > primitive, std::vector< array > inputs)mlx::core::array
    wait()mlx::core::array
    ~array()mlx::core::array
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1array.html b/docs/build/html/classmlx_1_1core_1_1array.html index f223cd42a..f87d9b863 100644 --- a/docs/build/html/classmlx_1_1core_1_1array.html +++ b/docs/build/html/classmlx_1_1core_1_1array.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::array Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -120,26 +134,26 @@ Public Types - + - - + + - + - - + + - + @@ -167,13 +181,13 @@ Public Member Functions - + - + @@ -185,18 +199,18 @@ Public Member Functions - + - + - + @@ -250,10 +264,10 @@ Public Member Functions - + - + @@ -274,13 +288,13 @@ Public Member Functions - + - + - + @@ -291,7 +305,7 @@ Public Member Functions

    Public Member Functions

    template<typename T >
    template<typename T>
     array (T val, Dtype dtype=TypeToDtype< T >())
     Construct a scalar array with zero dimensions.
     
     array (const std::complex< float > &val, Dtype dtype=complex64)
     
    template<typename It >
     array (It data, Shape shape, Dtype dtype=TypeToDtype< typename std::iterator_traits< It >::value_type >())
    template<typename It>
     array (It data, Shape shape, Dtype dtype=TypeToDtype< typename std::iterator_traits< It >::value_type >())
     
    template<typename T >
    template<typename T>
     array (std::initializer_list< T > data, Dtype dtype=TypeToDtype< T >())
     
     array (std::initializer_list< float > data)
     
     array (std::initializer_list< int > data, Dtype dtype)
     
    template<typename T >
     array (std::initializer_list< T > data, Shape shape, Dtype dtype=TypeToDtype< T >())
    template<typename T>
     array (std::initializer_list< T > data, Shape shape, Dtype dtype=TypeToDtype< T >())
     
     array (allocator::Buffer data, Shape shape, Dtype dtype, Deleter deleter=allocator::free)
     array (allocator::Buffer data, Shape shape, Dtype dtype, Deleter deleter=allocator::free)
     
    arrayoperator= (const array &other) &&=delete
     Assignment to rvalue does not compile.
    size_t ndim () const
     The number of dimensions of the array.
     
    const Shapeshape () const
    const Shapeshape () const
     The shape of the array as a vector of integers.
     
    auto shape (int dim) const
     Get the size of the corresponding dimension.
     
    const Stridesstrides () const
    const Stridesstrides () const
     The strides of the array.
     
    auto strides (int dim) const
    void eval ()
     Evaluate the array.
     
    template<typename T >
    template<typename T>
    item ()
     Get the value from a scalar array.
     
    template<typename T >
    template<typename T>
    item () const
     
    ArrayIterator begin () const
     
    ArrayIterator end () const
     
     array (Shape shape, Dtype dtype, std::shared_ptr< Primitive > primitive, std::vector< array > inputs)
     array (Shape shape, Dtype dtype, std::shared_ptr< Primitive > primitive, std::vector< array > inputs)
     The following methods should be used with caution.
     
    std::uintptr_t id () const
     
    std::shared_ptr< Datadata_shared_ptr () const
     
    template<typename T >
    template<typename T>
    T * data ()
     
    template<typename T >
    template<typename T>
    const T * data () const
     
    bool is_available () const
     
    void set_data (allocator::Buffer buffer, Deleter d=allocator::free)
     
    void set_data (allocator::Buffer buffer, size_t data_size, Strides strides, Flags flags, Deleter d=allocator::free)
    void set_data (allocator::Buffer buffer, size_t data_size, Strides strides, Flags flags, Deleter d=allocator::free)
     
    void copy_shared_buffer (const array &other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
    void copy_shared_buffer (const array &other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
     
    void copy_shared_buffer (const array &other)
     
    void move_shared_buffer (array other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
    void move_shared_buffer (array other, const Strides &strides, Flags flags, size_t data_size, size_t offset=0)
     
    void move_shared_buffer (array other)
     
    - +

    Static Public Member Functions

    static std::vector< arraymake_arrays (std::vector< Shape > shapes, const std::vector< Dtype > &dtypes, const std::shared_ptr< Primitive > &primitive, const std::vector< array > &inputs)
    static std::vector< arraymake_arrays (std::vector< Shape > shapes, const std::vector< Dtype > &dtypes, const std::shared_ptr< Primitive > &primitive, const std::vector< array > &inputs)
     

    Member Enumeration Documentation

    @@ -322,7 +336,7 @@ Static Public Member Functions
    -template<typename T >
    +template<typename T>
    @@ -340,7 +354,7 @@ template<typename T >
    -explicit +explicit
    @@ -371,7 +385,7 @@ template<typename T >
    -explicit +explicit
    @@ -384,7 +398,10 @@ template<typename T >
    -template<typename It >
    +template<typename It>
    + + + + + +
    @@ -394,7 +411,7 @@ template<typename It > - + @@ -402,6 +419,11 @@ template<typename It >
    mlx::core::array::array
    Shape shape, Shape shape,
    Dtype dtype = TypeToDtype<typename std::iterator_traits<It>::value_type>() )
    +
    +explicit
    @@ -412,7 +434,10 @@ template<typename It >
    -template<typename T >
    +template<typename T>
    + + + + + +
    @@ -425,6 +450,11 @@ template<typename T >
    mlx::core::array::array Dtype dtype = TypeToDtype<T>() )
    +
    +explicit
    @@ -434,6 +464,9 @@ template<typename T >
    + + + + + +
    @@ -442,6 +475,11 @@ template<typename T >
    mlx::core::array::array
    +
    +explicit
    @@ -451,6 +489,9 @@ template<typename T >
    + + + + + +
    @@ -463,6 +504,11 @@ template<typename T >
    mlx::core::array::array Dtype dtype )
    +
    +explicit
    @@ -473,7 +519,10 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    + + + + + +
    @@ -483,7 +532,7 @@ template<typename T > - + @@ -491,6 +540,11 @@ template<typename T >
    mlx::core::array::array
    Shape shape, Shape shape,
    Dtype dtype = TypeToDtype<T>() )
    +
    +explicit
    @@ -500,6 +554,9 @@ template<typename T >
    + + + + + +
    @@ -509,7 +566,7 @@ template<typename T > - + @@ -522,6 +579,11 @@ template<typename T >
    mlx::core::array::array
    Shape shape, Shape shape,
    Deleter deleter = allocator::free )
    +
    +explicit
    @@ -544,7 +606,7 @@ template<typename T >
    -default +default
    @@ -569,7 +631,7 @@ template<typename T >
    -default +default
    @@ -585,7 +647,7 @@ template<typename T >
    mlx::core::array::array ( - Shape shape, + Shape shape, @@ -646,7 +708,7 @@ template<typename T > -inline +inline
    @@ -671,7 +733,7 @@ template<typename T >
    -inline +inline
    @@ -696,7 +758,7 @@ template<typename T >
    -inline +inline
    @@ -721,7 +783,7 @@ template<typename T >
    -inline +inline
    @@ -746,7 +808,7 @@ template<typename T >
    -inline +inline
    @@ -784,7 +846,7 @@ template<typename T >
    - const Strides & strides, + const Strides & strides, @@ -812,7 +874,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -826,7 +888,7 @@ template<typename T >
    -inline +inline
    @@ -839,7 +901,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -853,7 +915,7 @@ template<typename T >
    -inline +inline
    @@ -878,7 +940,7 @@ template<typename T >
    -inline +inline
    @@ -903,7 +965,7 @@ template<typename T >
    -inline +inline
    @@ -950,7 +1012,7 @@ template<typename T >
    -inline +inline
    @@ -977,7 +1039,7 @@ template<typename T >
    -inline +inline
    @@ -1021,7 +1083,7 @@ template<typename T >
    -inline +inline
    @@ -1046,7 +1108,7 @@ template<typename T >
    -inline +inline
    @@ -1073,7 +1135,7 @@ template<typename T >
    -inline +inline
    @@ -1100,7 +1162,7 @@ template<typename T >
    -inline +inline
    @@ -1127,7 +1189,7 @@ template<typename T >
    -inline +inline
    @@ -1152,7 +1214,7 @@ template<typename T >
    -inline +inline
    @@ -1196,7 +1258,7 @@ template<typename T >
    -inline +inline
    @@ -1228,7 +1290,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -1249,7 +1311,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    T mlx::core::array::item
    @@ -1280,7 +1342,7 @@ template<typename T >
    T mlx::core::array::item
    -inline +inline
    @@ -1301,7 +1363,7 @@ template<typename T >
    static std::vector< array > mlx::core::array::make_arrays ( - std::vector< Shape > shapes, + std::vector< Shape > shapes, @@ -1321,7 +1383,7 @@ template<typename T > -static +static
    @@ -1359,7 +1421,7 @@ template<typename T >
    - const Strides & strides, + const Strides & strides, @@ -1399,7 +1461,7 @@ template<typename T > -inline +inline
    @@ -1426,7 +1488,7 @@ template<typename T >
    -inline +inline
    @@ -1453,7 +1515,7 @@ template<typename T >
    -delete +delete
    @@ -1478,7 +1540,7 @@ template<typename T >
    -default +default
    @@ -1505,7 +1567,7 @@ template<typename T >
    -inline +inline
    @@ -1530,7 +1592,7 @@ template<typename T >
    -delete +delete
    @@ -1557,7 +1619,7 @@ template<typename T >
    -inline +inline
    @@ -1585,7 +1647,7 @@ template<typename T >
    -inline +inline
    @@ -1610,7 +1672,7 @@ template<typename T >
    -inline +inline
    @@ -1637,7 +1699,7 @@ template<typename T >
    -inline +inline
    @@ -1664,7 +1726,7 @@ template<typename T >
    -inline +inline
    @@ -1713,7 +1775,7 @@ template<typename T >
    - Strides strides, + Strides strides, @@ -1752,7 +1814,7 @@ template<typename T > -inline +inline
    @@ -1777,7 +1839,7 @@ template<typename T >
    -inline +inline
    @@ -1802,7 +1864,7 @@ template<typename T >
    -inline +inline
    @@ -1819,7 +1881,7 @@ template<typename T >
    - + @@ -1827,7 +1889,7 @@ template<typename T >
    const Shape & mlx::core::array::shape const Shape & mlx::core::array::shape ( ) const
    -inline +inline
    @@ -1854,7 +1916,7 @@ template<typename T >
    -inline +inline
    @@ -1882,7 +1944,7 @@ template<typename T >
    -inline +inline
    @@ -1909,7 +1971,7 @@ template<typename T >
    -inline +inline
    @@ -1936,7 +1998,7 @@ template<typename T >
    -inline +inline
    @@ -1963,7 +2025,7 @@ template<typename T >
    -inline +inline
    @@ -1980,7 +2042,7 @@ template<typename T >
    - + @@ -1988,7 +2050,7 @@ template<typename T >
    const Strides & mlx::core::array::strides const Strides & mlx::core::array::strides ( ) const
    -inline +inline
    @@ -2015,7 +2077,7 @@ template<typename T >
    -inline +inline
    @@ -2046,10 +2108,13 @@ template<typename T >
  • mlx/array.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1array.js b/docs/build/html/classmlx_1_1core_1_1array.js new file mode 100644 index 000000000..3f3d71b56 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1array.js @@ -0,0 +1,79 @@ +var classmlx_1_1core_1_1array = +[ + [ "ArrayIterator", "structmlx_1_1core_1_1array_1_1_array_iterator.html", "structmlx_1_1core_1_1array_1_1_array_iterator" ], + [ "Data", "structmlx_1_1core_1_1array_1_1_data.html", "structmlx_1_1core_1_1array_1_1_data" ], + [ "Flags", "structmlx_1_1core_1_1array_1_1_flags.html", "structmlx_1_1core_1_1array_1_1_flags" ], + [ "Status", "classmlx_1_1core_1_1array.html#a199726612fa8a4bcd5c2d05eadad7078", [ + [ "unscheduled", "classmlx_1_1core_1_1array.html#a199726612fa8a4bcd5c2d05eadad7078ae8a9988458b0355001674020a45656fb", null ], + [ "scheduled", "classmlx_1_1core_1_1array.html#a199726612fa8a4bcd5c2d05eadad7078af8a6f8eed2395ab89a758dec434393ae", null ], + [ "evaluated", "classmlx_1_1core_1_1array.html#a199726612fa8a4bcd5c2d05eadad7078a6fc3d7595445dd877584495f47535268", null ], + [ "available", "classmlx_1_1core_1_1array.html#a199726612fa8a4bcd5c2d05eadad7078a308bd3e5bf976888b120dd36d0c2d2ae", null ] + ] ], + [ "array", "classmlx_1_1core_1_1array.html#a75fac72da3ce214fa3737df92a64b232", null ], + [ "array", "classmlx_1_1core_1_1array.html#a6db4b8c28c767cc16ad2785ece496dca", null ], + [ "array", "classmlx_1_1core_1_1array.html#abcc030a1c2434ec75ad9425751bffdc7", null ], + [ "array", "classmlx_1_1core_1_1array.html#a87f170384f4fb93decf2b80ae7280f00", null ], + [ "array", "classmlx_1_1core_1_1array.html#a46642301da11e3eb4312c37349fbc9d7", null ], + [ "array", "classmlx_1_1core_1_1array.html#a5e1812029394bfb1a706c83611286f49", null ], + [ "array", "classmlx_1_1core_1_1array.html#a89a7b0c02366ca456232d347ebb11507", null ], + [ "array", "classmlx_1_1core_1_1array.html#a485399a6680a370cabb08470306b63d4", null ], + [ "array", "classmlx_1_1core_1_1array.html#a297df274e2da5cb884257bbeffd6b187", null ], + [ "array", "classmlx_1_1core_1_1array.html#ab6cbccbba66cc54acda4390b19f0397c", null ], + [ "array", "classmlx_1_1core_1_1array.html#abc26528271076510822e374d1668a94b", null ], + [ "~array", "classmlx_1_1core_1_1array.html#a2f16c1ef8ee248d2fba95520c86dfad2", null ], + [ "attach_event", "classmlx_1_1core_1_1array.html#a000c3cfe13cb378bf0523b62816190da", null ], + [ "begin", "classmlx_1_1core_1_1array.html#a76b258b169d7d73419ebbf85340fb914", null ], + [ "buffer", "classmlx_1_1core_1_1array.html#ab3daf04c27c4593d9d73c397b8484a08", null ], + [ "buffer", "classmlx_1_1core_1_1array.html#a634466ce661485394f2fdc3bd6796bcd", null ], + [ "buffer_size", "classmlx_1_1core_1_1array.html#a914577c63755b2e862d2da68bbf8e3dd", null ], + [ "copy_shared_buffer", "classmlx_1_1core_1_1array.html#a92974c656c35a972ad241f80584bbd29", null ], + [ "copy_shared_buffer", "classmlx_1_1core_1_1array.html#ad2814dbffa5ad174d9c97a10bf4cf26b", null ], + [ "data", "classmlx_1_1core_1_1array.html#a72e3ce6c03fefe272cadf214bd127b95", null ], + [ "data", "classmlx_1_1core_1_1array.html#a99fb28eeab39b9f429373f8bd7557676", null ], + [ "data_shared_ptr", "classmlx_1_1core_1_1array.html#ab84c792117e29cdf90ef3433303f6141", null ], + [ "data_size", "classmlx_1_1core_1_1array.html#afaf2a370fa35d96af1b27a4b814e3bfd", null ], + [ "detach", "classmlx_1_1core_1_1array.html#a84948c29df8c957904919c8602692bd2", null ], + [ "dtype", "classmlx_1_1core_1_1array.html#ae29e7d6fbfbea1e5e321a8d1ea3cfacd", null ], + [ "end", "classmlx_1_1core_1_1array.html#a5daf64552fb450825c9b382f3a5fa2d4", null ], + [ "eval", "classmlx_1_1core_1_1array.html#a2820c45188071a22175e9fa42e10a49a", null ], + [ "event", "classmlx_1_1core_1_1array.html#a0a8e4d6e67e739a712876bb36f88f9bf", null ], + [ "flags", "classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1", null ], + [ "has_primitive", "classmlx_1_1core_1_1array.html#aa5aceab15241e7826cbaf8b8a41440c1", null ], + [ "id", "classmlx_1_1core_1_1array.html#adfa53f3f26bb0f942fb1c67ec8cd5380", null ], + [ "inputs", "classmlx_1_1core_1_1array.html#acffb082177f9b78f0c52e406adff972f", null ], + [ "inputs", "classmlx_1_1core_1_1array.html#a2913abcdf71826827c8457f529825fff", null ], + [ "is_available", "classmlx_1_1core_1_1array.html#aebed1f37c19197be76105161102a8a40", null ], + [ "is_donatable", "classmlx_1_1core_1_1array.html#a4677a404b5d191af20b52649225de087", null ], + [ "is_tracer", "classmlx_1_1core_1_1array.html#af9acb115019b995354d366c4ac6b968c", null ], + [ "item", "classmlx_1_1core_1_1array.html#a90c5afddc2fa3028c0f8099bd64c8a99", null ], + [ "item", "classmlx_1_1core_1_1array.html#a8650a99a6b7549bc823b03ad92590ff7", null ], + [ "itemsize", "classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0", null ], + [ "make_arrays", "classmlx_1_1core_1_1array.html#a45b1c9763fe921fe5880ca28316ae98c", null ], + [ "move_shared_buffer", "classmlx_1_1core_1_1array.html#a38d7ad605f8282e5e49d0c09e0555c78", null ], + [ "move_shared_buffer", "classmlx_1_1core_1_1array.html#ad41cc5e7aebfcad849ad15d697584cf8", null ], + [ "nbytes", "classmlx_1_1core_1_1array.html#a387b67cd3ef5cfc1e749c371766c4a05", null ], + [ "ndim", "classmlx_1_1core_1_1array.html#a53006e77d13d9d88b525ef577748939f", null ], + [ "operator=", "classmlx_1_1core_1_1array.html#a5c89c2406a610b32943955f9a5060fbd", null ], + [ "operator=", "classmlx_1_1core_1_1array.html#ad3277ff68f1336aa217f9cbe40181479", null ], + [ "operator=", "classmlx_1_1core_1_1array.html#a5da41aabecf4c8055b7515341bf57147", null ], + [ "operator=", "classmlx_1_1core_1_1array.html#a8acf2b4c75f9b7f79da6675dbc36cf36", null ], + [ "outputs", "classmlx_1_1core_1_1array.html#a2c186fd527f984f0589d4183b4976289", null ], + [ "overwrite_descriptor", "classmlx_1_1core_1_1array.html#a95e6b156c8e05439f076b85c05079387", null ], + [ "primitive", "classmlx_1_1core_1_1array.html#a790548666511d8c6d9f92ee79d2ce14c", null ], + [ "primitive_id", "classmlx_1_1core_1_1array.html#af5ad83605d4eea81561246873bee1d7c", null ], + [ "primitive_ptr", "classmlx_1_1core_1_1array.html#a5119cd616ec3c05d65878944b8889469", null ], + [ "set_data", "classmlx_1_1core_1_1array.html#af9e3a02b4c0023c36248dc75c887214f", null ], + [ "set_data", "classmlx_1_1core_1_1array.html#a5f338202a39d37fa3f4241e851a15838", null ], + [ "set_siblings", "classmlx_1_1core_1_1array.html#a8fccbe7a4edfd8cca168161124e263b1", null ], + [ "set_status", "classmlx_1_1core_1_1array.html#a63598018999b49f1340b183cb303f05c", null ], + [ "set_tracer", "classmlx_1_1core_1_1array.html#af26e6be1a9e6239471a4c24310c0c7c8", null ], + [ "shape", "classmlx_1_1core_1_1array.html#a1d06c76b0f3010a5c329d0e9e29e0597", null ], + [ "shape", "classmlx_1_1core_1_1array.html#ac50382b652f6e8fbd50d42b7ff595810", null ], + [ "siblings", "classmlx_1_1core_1_1array.html#a7263f23e70a580a9bc2129fbcde36e6c", null ], + [ "siblings", "classmlx_1_1core_1_1array.html#acf80fde8f743f65ad5b4be69fcb7a74d", null ], + [ "size", "classmlx_1_1core_1_1array.html#a598f87161926d9e0b516860f0ea2c8f6", null ], + [ "status", "classmlx_1_1core_1_1array.html#a7102659be87e9ef62966696ab9b07dad", null ], + [ "strides", "classmlx_1_1core_1_1array.html#a28cf1928f5ec2f972a94ff1c0e71187d", null ], + [ "strides", "classmlx_1_1core_1_1array.html#ac9bfc251a9937eaefbe7f8c5ffd304d1", null ], + [ "wait", "classmlx_1_1core_1_1array.html#a648592006f1c92287734ba2428eaa45e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather-members.html index 572e4ed5f..6dd16dec7 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather-members.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::distributed::AllGather Member List
    @@ -115,10 +129,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::distributed::AllGathervirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.html index 2be3d207e..7a22feb37 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::distributed::AllGather Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -147,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -184,7 +198,7 @@ Public Member Functions -inline +inline
    @@ -231,7 +245,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -265,7 +279,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -301,7 +315,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -344,7 +358,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -377,7 +391,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -393,10 +407,13 @@ Public Member Functions
  • mlx/distributed/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.js new file mode 100644 index 000000000..51cac2586 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_gather.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1distributed_1_1_all_gather = +[ + [ "AllGather", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#af4b10a5b61f160fb64353057c185b661", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#a8af1e90d4aa56f31ec40ad152ebd2421", null ], + [ "eval_cpu", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#ab721fe0072fffbddbc3c4334dd033ba5", null ], + [ "eval_gpu", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#a4251ce0f2db2045226b66210b828af7a", null ], + [ "jvp", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#a96f08a4ea8453d0b4b737c7b07972913", null ], + [ "vjp", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#aa5eff6fc128b71220899aab8ab9116fb", null ], + [ "vmap", "classmlx_1_1core_1_1distributed_1_1_all_gather.html#ad532d1d51f089dec3c84799b724ea031", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce-members.html index 9c07a0a32..f18facba1 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce-members.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::distributed::AllReduce Member List
    @@ -121,10 +135,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::distributed::AllReducevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.html index fc3349d33..550954e34 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::distributed::AllReduce Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Types | @@ -160,7 +174,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -225,7 +239,7 @@ Public Member Functions -inline +inline
    @@ -255,7 +269,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -289,7 +303,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -325,7 +339,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -354,7 +368,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -397,7 +411,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -430,7 +444,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -446,10 +460,13 @@ Public Member Functions
  • mlx/distributed/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.js new file mode 100644 index 000000000..75b55992d --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_all_reduce.js @@ -0,0 +1,18 @@ +var classmlx_1_1core_1_1distributed_1_1_all_reduce = +[ + [ "ReduceType", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924", [ + [ "And", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924aba3b7fb927f6b6c8b198a9cdc3dd9e02", null ], + [ "Or", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924a7a959bb7b33f410a03b3c887173fd7ed", null ], + [ "Sum", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924a1fc7c1f09c80650ab0497e2d6781d65f", null ], + [ "Prod", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924acdd1ec09a2fd99c81c561b5c63a4b482", null ], + [ "Min", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924a4f685dcd48e6614d6bb2ccda4f2686ef", null ], + [ "Max", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abb4560980e5d01aed14175ce8f6fc924ac00cf69bbba24f7ab08d3ad618705988", null ] + ] ], + [ "AllReduce", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#a2d1ea56cbf72a316680ea90aa6da1c2d", null ], + [ "eval_cpu", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#acdc1965ad64ee9ee6328fe150a97902e", null ], + [ "eval_gpu", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#a52df7155f56b8450581b2fd2747cad20", null ], + [ "jvp", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#aeaf6f2b5955e7417cd1e36db42c45a80", null ], + [ "print", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#a6814f9008a683c6911d5b8991ef770ab", null ], + [ "vjp", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#abbf6d1d63dcda207ad7d9eeb4fc36225", null ], + [ "vmap", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html#a3f2dc71859847ca675ec4bfbe125035a", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive-members.html index 08a37fea4..e7d609efd 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive-members.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::distributed::DistPrimitive Member List
    @@ -113,10 +127,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.html index 50252d48e..5ecadd24a 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::distributed::DistPrimitive Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -145,7 +159,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -182,7 +196,7 @@ Public Member Functions -inline +inline
    @@ -208,7 +222,7 @@ Public Member Functions -inline +inline
    @@ -219,10 +233,13 @@ Public Member Functions
  • mlx/distributed/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.js new file mode 100644 index 000000000..efde360b7 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_dist_primitive.js @@ -0,0 +1,5 @@ +var classmlx_1_1core_1_1distributed_1_1_dist_primitive = +[ + [ "DistPrimitive", "classmlx_1_1core_1_1distributed_1_1_dist_primitive.html#a8c54166951522c2a52ef39fce8c87f8f", null ], + [ "group", "classmlx_1_1core_1_1distributed_1_1_dist_primitive.html#a8831cb61ac633431b78b5fb99c0ea9ff", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv-members.html index f24513f93..e0fb6fd38 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv-members.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::distributed::Recv Member List
    @@ -115,10 +129,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.html index e6c954d0c..4b0eeb49a 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::distributed::Recv Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -147,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -189,7 +203,7 @@ Public Member Functions -inline +inline
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -270,7 +284,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -283,10 +297,13 @@ Public Member Functions
  • mlx/distributed/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.js new file mode 100644 index 000000000..a86ff3d9b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_recv.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1distributed_1_1_recv = +[ + [ "Recv", "classmlx_1_1core_1_1distributed_1_1_recv.html#a511dd4e0259da18a181a25579d9b55db", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1distributed_1_1_recv.html#a7a0cad13da7cf8e565934318a2bc34f1", null ], + [ "eval_cpu", "classmlx_1_1core_1_1distributed_1_1_recv.html#a3be84b08122a939edd6062d26261358a", null ], + [ "eval_gpu", "classmlx_1_1core_1_1distributed_1_1_recv.html#a932e39624bc3d234a7489c3decc4749e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send-members.html index a74d8016e..3741e0827 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send-members.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::distributed::Send Member List
    @@ -115,10 +129,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::distributed::Sendvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.html index cc0c1c9fc..3284c1321 100644 --- a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.html +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::distributed::Send Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -147,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -189,7 +203,7 @@ Public Member Functions -inline +inline
    @@ -236,7 +250,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -270,7 +284,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -301,7 +315,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -317,10 +331,13 @@ Public Member Functions
  • mlx/distributed/primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.js new file mode 100644 index 000000000..331dfca98 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1_send.js @@ -0,0 +1,8 @@ +var classmlx_1_1core_1_1distributed_1_1_send = +[ + [ "Send", "classmlx_1_1core_1_1distributed_1_1_send.html#a2481dd876b14d4a13ac466cbca9c4eac", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1distributed_1_1_send.html#a31bf76e24cf3836cf1fd26da30712e31", null ], + [ "eval_cpu", "classmlx_1_1core_1_1distributed_1_1_send.html#af2620837bfc1b97217d006ed6e374051", null ], + [ "eval_gpu", "classmlx_1_1core_1_1distributed_1_1_send.html#a0c8dbd2a912be91be04ec701e29fba3d", null ], + [ "vmap", "classmlx_1_1core_1_1distributed_1_1_send.html#a5cfb66191b9e8b86649da77af55b0f93", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl-members.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl-members.html new file mode 100644 index 000000000..d6bdd31e3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl-members.html @@ -0,0 +1,127 @@ + + + + + + + +MLX: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    mlx::core::distributed::detail::GroupImpl Member List
    +
    +
    + +

    This is the complete list of members for mlx::core::distributed::detail::GroupImpl, including all inherited members.

    + + + + + + + + +
    all_gather(const array &input, array &output)=0mlx::core::distributed::detail::GroupImplpure virtual
    all_sum(const array &input, array &output)=0mlx::core::distributed::detail::GroupImplpure virtual
    rank()=0mlx::core::distributed::detail::GroupImplpure virtual
    recv(array &out, int src)=0mlx::core::distributed::detail::GroupImplpure virtual
    send(const array &input, int dst)=0mlx::core::distributed::detail::GroupImplpure virtual
    size()=0mlx::core::distributed::detail::GroupImplpure virtual
    split(int color, int key=-1)=0mlx::core::distributed::detail::GroupImplpure virtual
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html new file mode 100644 index 000000000..1ce3e9c75 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html @@ -0,0 +1,345 @@ + + + + + + + +MLX: mlx::core::distributed::detail::GroupImpl Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::distributed::detail::GroupImpl Class Referenceabstract
    +
    +
    + +

    Abstract base class of a distributed group implementation. + More...

    + +

    #include <distributed_impl.h>

    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    virtual int rank ()=0
     
    virtual int size ()=0
     
    virtual std::shared_ptr< GroupImplsplit (int color, int key=-1)=0
     
    virtual void all_sum (const array &input, array &output)=0
     
    virtual void all_gather (const array &input, array &output)=0
     
    virtual void send (const array &input, int dst)=0
     
    virtual void recv (array &out, int src)=0
     
    +

    Detailed Description

    +

    Abstract base class of a distributed group implementation.

    +

    Member Function Documentation

    + +

    ◆ all_gather()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual void mlx::core::distributed::detail::GroupImpl::all_gather (const array & input,
    array & output )
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ all_sum()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual void mlx::core::distributed::detail::GroupImpl::all_sum (const array & input,
    array & output )
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ rank()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual int mlx::core::distributed::detail::GroupImpl::rank ()
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ recv()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual void mlx::core::distributed::detail::GroupImpl::recv (array & out,
    int src )
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ send()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual void mlx::core::distributed::detail::GroupImpl::send (const array & input,
    int dst )
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ size()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual int mlx::core::distributed::detail::GroupImpl::size ()
    +
    +pure virtual
    +
    + +
    +
    + +

    ◆ split()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    virtual std::shared_ptr< GroupImpl > mlx::core::distributed::detail::GroupImpl::split (int color,
    int key = -1 )
    +
    +pure virtual
    +
    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.js b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.js new file mode 100644 index 000000000..b81c3a573 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl = +[ + [ "all_gather", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#a04bb1df23abe5b1f3fa0126375c6cea4", null ], + [ "all_sum", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#ae163a6f444c6cc8820288b20f294e483", null ], + [ "rank", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#ae0838a40ce58442cdc73d57d7969a702", null ], + [ "recv", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#ac4af5fc16a82ba8c72df04d7694f8352", null ], + [ "send", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#ac8472eb2f96d1b14c7e4ccef56268ba0", null ], + [ "size", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#ab1c8044b05f185c4bcc53002d4587599", null ], + [ "split", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html#a87800a23c8160933a2d77a55a959194d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize-members.html index adfda83af..29dd2aa35 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::AffineQuantize Member List
    @@ -109,15 +123,18 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os)=0mlx::core::Primitivepure virtual - stream()mlx::core::Primitiveinline - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual + state() constmlx::core::fast::AffineQuantizeinline + stream()mlx::core::Primitiveinline + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.html index 10ff34758..a967acf68 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::AffineQuantize Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -121,9 +135,11 @@ Public Member Functions bool is_equivalent (const Primitive &other) const override  Equivalence check defaults to false unless overridden by the primitive.
      -std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override +std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) override  Get the output shapes of the primitive.
      +auto state () const +  - Public Member Functions inherited from mlx::core::fast::Custom  Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)   @@ -197,7 +213,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -244,7 +260,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -278,7 +294,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -305,7 +321,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -326,7 +342,7 @@ Public Member Functions - + @@ -334,7 +350,7 @@ Public Member Functions
    std::vector< Shape > mlx::core::fast::AffineQuantize::output_shapes std::vector< Shape > mlx::core::fast::AffineQuantize::output_shapes ( const std::vector< array > & inputs)
    -overridevirtual +overridevirtual
    @@ -344,16 +360,44 @@ Public Member Functions

    Reimplemented from mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::fast::AffineQuantize::state () const
    +
    +inline
    +
    +

    The documentation for this class was generated from the following file:
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.js new file mode 100644 index 000000000..2547ef1db --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_affine_quantize.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1fast_1_1_affine_quantize = +[ + [ "AffineQuantize", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a84d5fa9e8c3de407fbcc5f38d2ed1473", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a4b8f1b1f633002c8ca6fa8f0ef4dd587", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a3b5d628628d245b38911118d4a0ff9fd", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a63812b2abaf26ad7e7fa4c9e82db1628", null ], + [ "is_equivalent", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a5936175e5923aec272d6f718785f57a1", null ], + [ "output_shapes", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#a50934862ccdb16a3dcce6626c5727080", null ], + [ "state", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html#aa5a03284c6f5639d684dd34d86050cf9", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom-members.html index 0de1f87ae..227e99700 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::Custom Member List
    @@ -112,10 +126,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.html index 143e88f17..f203a9e15 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::Custom Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -146,7 +160,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -183,7 +197,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -218,7 +232,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -261,7 +275,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -296,7 +310,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -312,10 +326,13 @@ Public Member Functions
  • mlx/fast_primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.js new file mode 100644 index 000000000..cc855bab3 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1fast_1_1_custom = +[ + [ "Custom", "classmlx_1_1core_1_1fast_1_1_custom.html#a4186fea23f7156c38960426821fca313", null ], + [ "jvp", "classmlx_1_1core_1_1fast_1_1_custom.html#ac77b28702654df8e7d882a49357a9584", null ], + [ "vjp", "classmlx_1_1core_1_1fast_1_1_custom.html#a74be4bcd0382f7f6400bf73fd5569c91", null ], + [ "vmap", "classmlx_1_1core_1_1fast_1_1_custom.html#a7f4c3a4c48c6807faa36fb31e39dad8d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel-members.html index 6ed89a112..63c6a4273 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::CustomKernel Member List
    @@ -113,10 +127,12 @@ $(function(){ initResizable(false); }); vmap(const std::vector< array > &inputs, const std::vector< int > &axes)mlx::core::Primitivevirtual ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.html index a90eabc7a..6bbe8ec04 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::CustomKernel Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -141,7 +155,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -208,7 +222,7 @@ Public Member Functions -inline +inline
    @@ -255,7 +269,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -289,7 +303,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -302,10 +316,13 @@ Public Member Functions
  • mlx/fast_primitives.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.js new file mode 100644 index 000000000..8195f7c9c --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_custom_kernel.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1fast_1_1_custom_kernel = +[ + [ "CustomKernel", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html#a954893e07f0d36715b4e1e414b6f2153", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html#a116ecf31c8672c94e5ea06c1d43e9534", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html#a4ad1b7a9919753c759093f3e21a15bad", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html#a2ed2a16b23053f8195068386a99fd6db", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm-members.html index a6b373d2a..ba8d2bd18 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::LayerNorm Member List
    @@ -95,9 +109,9 @@ $(function(){ initResizable(false); });

    This is the complete list of members for mlx::core::fast::LayerNorm, including all inherited members.

    - - - + + + @@ -115,10 +129,12 @@ $(function(){ initResizable(false); });
    Custom(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)mlx::core::fast::Custominlineexplicit
    DEFINE_PRINT(LayerNorm) bool is_equivalent(const Primitive &other) const overridemlx::core::fast::LayerNorm
    device()mlx::core::Primitiveinline
    eps_mlx::core::fast::LayerNorm
    DEFINE_INPUT_OUTPUT_SHAPE() auto state() constmlx::core::fast::LayerNorminline
    DEFINE_PRINT(LayerNorm) bool is_equivalent(const Primitive &other) const overridemlx::core::fast::LayerNorm
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::LayerNorminlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::LayerNormvirtual
    is_equivalent(const Primitive &other) constmlx::core::Primitiveinlinevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.html index e1f941601..09b702cc7 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::LayerNorm Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::LayerNorm Class Reference
    @@ -122,6 +135,8 @@ Public Member Functions    DEFINE_PRINT (LayerNorm) bool is_equivalent(const Primitive &other) const override   + DEFINE_INPUT_OUTPUT_SHAPE () auto state() const +  - Public Member Functions inherited from mlx::core::fast::Custom  Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)   @@ -146,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -159,11 +174,6 @@ Public Member Functions   Primitiveoperator= (Primitive &&other)=delete   - - - -

    -Public Attributes

    DEFINE_INPUT_OUTPUT_SHAPE() private float eps_
     

    Constructor & Destructor Documentation

    @@ -193,7 +203,7 @@ Public Attributes -inline +inline
    @@ -201,6 +211,31 @@ Public Attributes

    Member Function Documentation

    + +

    ◆ DEFINE_INPUT_OUTPUT_SHAPE()

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::fast::LayerNorm::DEFINE_INPUT_OUTPUT_SHAPE () const
    +
    +inline
    +
    + +
    +

    ◆ DEFINE_PRINT()

    @@ -219,7 +254,7 @@ Public Attributes -override +override
    @@ -248,7 +283,7 @@ Public Attributes -inlineoverridevirtual +inlineoverridevirtual
    @@ -282,7 +317,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -323,7 +358,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -332,31 +367,19 @@ Public Attributes

    Reimplemented from mlx::core::fast::Custom.

    -
    - -

    Member Data Documentation

    - -

    ◆ eps_

    - -
    -
    - - - - -
    DEFINE_INPUT_OUTPUT_SHAPE () private float mlx::core::fast::LayerNorm::eps_
    -
    -

    The documentation for this class was generated from the following file: - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.js new file mode 100644 index 000000000..00909012e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1fast_1_1_layer_norm = +[ + [ "LayerNorm", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#a5ac38d50e62850589bf51ee313303153", null ], + [ "DEFINE_INPUT_OUTPUT_SHAPE", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#afd0818925ffea79f4e3dda0dd8cf0366", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#a467fcf02b3ddf1d8b6d476b244ae3568", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#a5d7a4c1c9ee84e327d1c371733108c05", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#a77abda7f47bffa2c037a5d60cccc1528", null ], + [ "vjp", "classmlx_1_1core_1_1fast_1_1_layer_norm.html#ae5e1b5df0705a6b1d141691a4396b0b6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p-members.html index d4599c5b6..0e98584c9 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::LayerNormVJP Member List
    @@ -109,15 +123,18 @@ $(function(){ initResizable(false); }); Primitive(const Primitive &other)=deletemlx::core::Primitive Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os)=0mlx::core::Primitivepure virtual - stream()mlx::core::Primitiveinline - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual + state() constmlx::core::fast::LayerNormVJPinline + stream()mlx::core::Primitiveinline + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html index 1ec96e7e9..2d3b66f86 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::LayerNormVJP Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -118,6 +132,8 @@ Public Member Functions    DEFINE_PRINT (LayerNormVJP) bool is_equivalent(const Primitive &other) const override   +auto state () const +  - Public Member Functions inherited from mlx::core::fast::Custom  Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)   @@ -145,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -187,7 +203,7 @@ Public Member Functions -inline +inline
    @@ -213,7 +229,7 @@ Public Member Functions -override +override
    @@ -242,7 +258,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -276,23 +292,51 @@ Public Member Functions -overridevirtual +overridevirtual

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::fast::LayerNormVJP::state () const
    +
    +inline
    +
    +

    The documentation for this class was generated from the following file:
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.js new file mode 100644 index 000000000..b276e1886 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.js @@ -0,0 +1,8 @@ +var classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p = +[ + [ "LayerNormVJP", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html#a41bc1391dbc0cf63b2c85b67956c08d9", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html#a5ab3eb5402c7e8060916056eb2b7887f", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html#a0d8c4c6e7462befc38f7e08244fa1c2b", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html#a954a003a4a27c8c4c60a5a14142a9cc3", null ], + [ "state", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html#a963e672c607b5f86080e6cc32a3cd6e5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm-members.html index 9021cfe3c..a33e66e74 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::RMSNorm Member List
    @@ -95,9 +109,9 @@ $(function(){ initResizable(false); });

    This is the complete list of members for mlx::core::fast::RMSNorm, including all inherited members.

    - - - + + + @@ -115,10 +129,12 @@ $(function(){ initResizable(false); });
    Custom(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)mlx::core::fast::Custominlineexplicit
    DEFINE_PRINT(RMSNorm) bool is_equivalent(const Primitive &other) const overridemlx::core::fast::RMSNorm
    device()mlx::core::Primitiveinline
    eps_mlx::core::fast::RMSNorm
    DEFINE_INPUT_OUTPUT_SHAPE() auto state() constmlx::core::fast::RMSNorminline
    DEFINE_PRINT(RMSNorm) bool is_equivalent(const Primitive &other) const overridemlx::core::fast::RMSNorm
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RMSNorminlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RMSNormvirtual
    is_equivalent(const Primitive &other) constmlx::core::Primitiveinlinevirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html index 8b3105d67..2dc17707d 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::RMSNorm Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::RMSNorm Class Reference
    @@ -122,6 +135,8 @@ Public Member Functions    DEFINE_PRINT (RMSNorm) bool is_equivalent(const Primitive &other) const override   + DEFINE_INPUT_OUTPUT_SHAPE () auto state() const +  - Public Member Functions inherited from mlx::core::fast::Custom  Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)   @@ -146,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -159,11 +174,6 @@ Public Member Functions   Primitiveoperator= (Primitive &&other)=delete   - - - -

    -Public Attributes

    DEFINE_INPUT_OUTPUT_SHAPE() private float eps_
     

    Constructor & Destructor Documentation

    @@ -193,7 +203,7 @@ Public Attributes -inline +inline
    @@ -201,6 +211,31 @@ Public Attributes

    Member Function Documentation

    + +

    ◆ DEFINE_INPUT_OUTPUT_SHAPE()

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::fast::RMSNorm::DEFINE_INPUT_OUTPUT_SHAPE () const
    +
    +inline
    +
    + +
    +

    ◆ DEFINE_PRINT()

    @@ -219,7 +254,7 @@ Public Attributes -override +override
    @@ -248,7 +283,7 @@ Public Attributes -inlineoverridevirtual +inlineoverridevirtual
    @@ -282,7 +317,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -323,7 +358,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -332,31 +367,19 @@ Public Attributes

    Reimplemented from mlx::core::fast::Custom.

    -
    - -

    Member Data Documentation

    - -

    ◆ eps_

    - -
    -
    - - - - -
    DEFINE_INPUT_OUTPUT_SHAPE () private float mlx::core::fast::RMSNorm::eps_
    -
    -

    The documentation for this class was generated from the following file: - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.js new file mode 100644 index 000000000..c95ec5598 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1fast_1_1_r_m_s_norm = +[ + [ "RMSNorm", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#a22adaff0749711263388ec151fcfebe2", null ], + [ "DEFINE_INPUT_OUTPUT_SHAPE", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#a2965dbda1bed67128e97c3c5d864c82f", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#ae6eea81b5e3789c2f6f376cc07f0a47c", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#a7da6e0cfd630958d9633b2e2bd97a54f", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#ae7955e8d43c097eecae264e804b4d8ca", null ], + [ "vjp", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html#aacfbbbc15fcee0a5ce4f519ca3cca5eb", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p-members.html index 5140a4137..2c3426f34 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::RMSNormVJP Member List
    @@ -109,15 +123,18 @@ $(function(){ initResizable(false); }); Primitive(Primitive &&other)=deletemlx::core::Primitive print(std::ostream &os)=0mlx::core::Primitivepure virtual RMSNormVJP(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, float eps)mlx::core::fast::RMSNormVJPinline - stream()mlx::core::Primitiveinline - vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual - vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual - ~Primitive()=defaultmlx::core::Primitivevirtual + state() constmlx::core::fast::RMSNormVJPinline + stream()mlx::core::Primitiveinline + vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual + vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual + ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html index 8fa479cd4..951d3579a 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::RMSNormVJP Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -118,6 +132,8 @@ Public Member Functions    DEFINE_PRINT (RMSNormVJP) bool is_equivalent(const Primitive &other) const override   +auto state () const +  - Public Member Functions inherited from mlx::core::fast::Custom  Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)   @@ -145,7 +161,7 @@ Public Member Functions virtual bool is_equivalent (const Primitive &other) const  Equivalence check defaults to false unless overridden by the primitive.
      -virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs) +virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)  Get the output shapes of the primitive.
      virtual ~Primitive ()=default @@ -187,7 +203,7 @@ Public Member Functions -inline +inline
    @@ -213,7 +229,7 @@ Public Member Functions -override +override
    @@ -242,7 +258,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -276,23 +292,51 @@ Public Member Functions -overridevirtual +overridevirtual

    Implements mlx::core::Primitive.

    +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + +
    + + + + + + + +
    auto mlx::core::fast::RMSNormVJP::state () const
    +
    +inline
    +
    +

    The documentation for this class was generated from the following file:
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.js new file mode 100644 index 000000000..343a1a398 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.js @@ -0,0 +1,8 @@ +var classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p = +[ + [ "RMSNormVJP", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html#aac060129b2e1af79bf388bfe705381ca", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html#a9895733eab845e11484d86cf6ecedced", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html#adfc1d52bc266466ab29ee45fd8fab439", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html#a48efb8fa84c4ba6cc9fb560ebbe01560", null ], + [ "state", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html#a379b27ac336ef351aa81142c5626ad76", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e-members.html index 328627206..32ece54d8 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::fast::RoPE Member List
    @@ -94,36 +108,33 @@ $(function(){ initResizable(false); });

    This is the complete list of members for mlx::core::fast::RoPE, including all inherited members.

    - - + + - - - - + + - - - - - - - - - - + + + + + + + + - - - - + + +
    base_mlx::core::fast::RoPE
    Custom(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)mlx::core::fast::Custominlineexplicit
    Custom(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)mlx::core::fast::Custominlineexplicit
    DEFINE_INPUT_OUTPUT_SHAPE() auto state() constmlx::core::fast::RoPEinline
    DEFINE_PRINT(RoPE) bool is_equivalent(const Primitive &other) const overridemlx::core::fast::RoPE
    device()mlx::core::Primitiveinline
    dims_mlx::core::fast::RoPE
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RoPEinlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RoPEvirtual
    forward_mlx::core::fast::RoPE
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RoPEinlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::RoPEvirtual
    is_equivalent(const Primitive &other) constmlx::core::Primitiveinlinevirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::fast::Customvirtual
    offset_mlx::core::fast::RoPE
    operator=(const Primitive &other)=deletemlx::core::Primitive
    operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os)=0mlx::core::Primitivepure virtual
    RoPE(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, int dims, bool traditional, float base, float scale, int offset, bool forward)mlx::core::fast::RoPEinline
    scale_mlx::core::fast::RoPE
    operator=(const Primitive &other)=deletemlx::core::Primitive
    operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual
    Primitive(Stream stream)mlx::core::Primitiveinlineexplicit
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os)=0mlx::core::Primitivepure virtual
    RoPE(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, int dims, bool traditional, float base, float scale, bool forward)mlx::core::fast::RoPEinline
    stream()mlx::core::Primitiveinline
    traditional_mlx::core::fast::RoPE
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::RoPEvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::RoPEvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.html index a5eedd416..bc0f12db0 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::RoPE Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::fast::RoPE Class Reference
    @@ -110,8 +123,8 @@ Inheritance diagram for mlx::core::fast::RoPE:
    - - + + @@ -122,6 +135,8 @@ Public Member Functions + + @@ -146,7 +161,7 @@ Public Member Functions - + @@ -159,25 +174,10 @@ Public Member Functions -

    Public Member Functions

     RoPE (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, int dims, bool traditional, float base, float scale, int offset, bool forward)
     
     RoPE (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, int dims, bool traditional, float base, float scale, bool forward)
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
     
     DEFINE_PRINT (RoPE) bool is_equivalent(const Primitive &other) const override
     
     DEFINE_INPUT_OUTPUT_SHAPE () auto state() const
     
    - Public Member Functions inherited from mlx::core::fast::Custom
     Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)
     
    virtual bool is_equivalent (const Primitive &other) const
     Equivalence check defaults to false unless overridden by the primitive.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
    Primitiveoperator= (Primitive &&other)=delete
     
    - - - - - - - - - - - - -

    -Public Attributes

    DEFINE_INPUT_OUTPUT_SHAPE() private int dims_
     
    bool traditional_
     
    float base_
     
    float scale_
     
    int offset_
     
    bool forward_
     

    Constructor & Destructor Documentation

    - -

    ◆ RoPE()

    + +

    ◆ RoPE()

    @@ -215,11 +215,6 @@ Public Attributes float scale, - - - - int offset, - @@ -228,7 +223,7 @@ Public Attributes -inline +inline
    @@ -236,6 +231,31 @@ Public Attributes

    Member Function Documentation

    + +

    ◆ DEFINE_INPUT_OUTPUT_SHAPE()

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::fast::RoPE::DEFINE_INPUT_OUTPUT_SHAPE () const
    +
    +inline
    +
    + +
    +

    ◆ DEFINE_PRINT()

    @@ -254,7 +274,7 @@ Public Attributes -override +override
    @@ -283,7 +303,7 @@ Public Attributes -inlineoverridevirtual +inlineoverridevirtual
    @@ -317,7 +337,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -358,7 +378,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -367,101 +387,19 @@ Public Attributes

    Reimplemented from mlx::core::fast::Custom.

    -
    - -

    Member Data Documentation

    - -

    ◆ base_

    - -
    -
    - - - - -
    float mlx::core::fast::RoPE::base_
    -
    - -
    -
    - -

    ◆ dims_

    - -
    -
    - - - - -
    DEFINE_INPUT_OUTPUT_SHAPE () private int mlx::core::fast::RoPE::dims_
    -
    - -
    -
    - -

    ◆ forward_

    - -
    -
    - - - - -
    bool mlx::core::fast::RoPE::forward_
    -
    - -
    -
    - -

    ◆ offset_

    - -
    -
    - - - - -
    int mlx::core::fast::RoPE::offset_
    -
    - -
    -
    - -

    ◆ scale_

    - -
    -
    - - - - -
    float mlx::core::fast::RoPE::scale_
    -
    - -
    -
    - -

    ◆ traditional_

    - -
    -
    - - - - -
    bool mlx::core::fast::RoPE::traditional_
    -
    -

    The documentation for this class was generated from the following file: - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.js new file mode 100644 index 000000000..5341206ef --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_ro_p_e.js @@ -0,0 +1,9 @@ +var classmlx_1_1core_1_1fast_1_1_ro_p_e = +[ + [ "RoPE", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#a60b399d7f38c0f5f50342a6b97f0eb1a", null ], + [ "DEFINE_INPUT_OUTPUT_SHAPE", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#a361cc8e0e56ff45ec98dbf81ed8eff2c", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#a2b06fe64fa8feca65140632087065e16", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#a05a7d595c6b9dadf7ddfd6e3fd402f0e", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#a913b6b00fc518b25ac3947e4e15790f2", null ], + [ "vjp", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html#ad999105414badd66c8fd9e069454a533", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention-members.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention-members.html index 2e4518f17..20c0188bf 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention-members.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::ScaledDotProductAttention Member List
    @@ -95,14 +109,14 @@ $(function(){ initResizable(false); });

    This is the complete list of members for mlx::core::fast::ScaledDotProductAttention, including all inherited members.

    - - - - - - - - + + + + + + + + @@ -110,17 +124,18 @@ $(function(){ initResizable(false); }); - - - - - - + + + + +
    Custom(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)mlx::core::fast::Custominlineexplicit
    DEFINE_PRINT(ScaledDotProductAttention)mlx::core::fast::ScaledDotProductAttention
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::ScaledDotProductAttentioninlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::ScaledDotProductAttentioninlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out)mlx::core::fast::ScaledDotProductAttention
    is_equivalent(const Primitive &other) const overridemlx::core::fast::ScaledDotProductAttentionvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::fast::Customvirtual
    needs_mask_mlx::core::fast::ScaledDotProductAttention
    DEFINE_INPUT_OUTPUT_SHAPE() auto state() constmlx::core::fast::ScaledDotProductAttentioninline
    DEFINE_PRINT(ScaledDotProductAttention)mlx::core::fast::ScaledDotProductAttention
    device()mlx::core::Primitiveinline
    eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::ScaledDotProductAttentioninlinevirtual
    eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) overridemlx::core::fast::ScaledDotProductAttentioninlinevirtual
    eval_gpu(const std::vector< array > &inputs, array &out)mlx::core::fast::ScaledDotProductAttention
    is_equivalent(const Primitive &other) const overridemlx::core::fast::ScaledDotProductAttentionvirtual
    jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) overridemlx::core::fast::Customvirtual
    operator=(const Primitive &other)=deletemlx::core::Primitive
    operator=(Primitive &&other)=deletemlx::core::Primitive
    output_shapes(const std::vector< array > &inputs)mlx::core::Primitivevirtual
    Primitive(const Primitive &other)=deletemlx::core::Primitive
    Primitive(Primitive &&other)=deletemlx::core::Primitive
    print(std::ostream &os)=0mlx::core::Primitivepure virtual
    scale_mlx::core::fast::ScaledDotProductAttention
    ScaledDotProductAttention(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, const float scale, const bool needs_mask)mlx::core::fast::ScaledDotProductAttentioninlineexplicit
    stream()mlx::core::Primitiveinline
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    ScaledDotProductAttention(Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, const float scale)mlx::core::fast::ScaledDotProductAttentioninlineexplicit
    stream()mlx::core::Primitiveinline
    vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) overridemlx::core::fast::Customvirtual
    vmap(const std::vector< array > &inputs, const std::vector< int > &axes) overridemlx::core::fast::Customvirtual
    ~Primitive()=defaultmlx::core::Primitivevirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html index f8f2226db..b75bd274b 100644 --- a/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::fast::ScaledDotProductAttention Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::fast::ScaledDotProductAttention Class Reference
    @@ -110,8 +123,8 @@ Inheritance diagram for mlx::core::fast::ScaledDotProductAttention:
    - - + + @@ -124,6 +137,8 @@ Public Member Functions + + @@ -148,7 +163,7 @@ Public Member Functions - + @@ -161,17 +176,10 @@ Public Member Functions -

    Public Member Functions

     ScaledDotProductAttention (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, const float scale, const bool needs_mask)
     
     ScaledDotProductAttention (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback, const float scale)
     
    void eval_cpu (const std::vector< array > &inputs, std::vector< array > &outputs) override
     A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the output arrays.
     
     
     DEFINE_PRINT (ScaledDotProductAttention)
     
     DEFINE_INPUT_OUTPUT_SHAPE () auto state() const
     
    - Public Member Functions inherited from mlx::core::fast::Custom
     Custom (Stream stream, std::function< std::vector< array >(std::vector< array >)> fallback)
     
    virtual void print (std::ostream &os)=0
     Print the primitive.
     
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
    virtual std::vector< Shapeoutput_shapes (const std::vector< array > &inputs)
     Get the output shapes of the primitive.
     
    virtual ~Primitive ()=default
     
    Primitiveoperator= (Primitive &&other)=delete
     
    - - - - -

    -Public Attributes

    DEFINE_INPUT_OUTPUT_SHAPE() private float scale_
     
    bool needs_mask_
     

    Constructor & Destructor Documentation

    - -

    ◆ ScaledDotProductAttention()

    + +

    ◆ ScaledDotProductAttention()

    @@ -192,17 +200,12 @@ Public Attributes - const float scale, - - - - - const bool needs_mask ) + const float scale ) -inlineexplicit +inlineexplicit
    @@ -210,6 +213,31 @@ Public Attributes

    Member Function Documentation

    + +

    ◆ DEFINE_INPUT_OUTPUT_SHAPE()

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::fast::ScaledDotProductAttention::DEFINE_INPUT_OUTPUT_SHAPE () const
    +
    +inline
    +
    + +
    +

    ◆ DEFINE_PRINT()

    @@ -249,7 +277,7 @@ Public Attributes -inlineoverridevirtual +inlineoverridevirtual
    @@ -304,7 +332,7 @@ Public Attributes -inlineoverridevirtual +inlineoverridevirtual
    @@ -331,7 +359,7 @@ Public Attributes -overridevirtual +overridevirtual
    @@ -340,45 +368,19 @@ Public Attributes

    Reimplemented from mlx::core::Primitive.

    -
    - -

    Member Data Documentation

    - -

    ◆ needs_mask_

    - -
    -
    - - - - -
    bool mlx::core::fast::ScaledDotProductAttention::needs_mask_
    -
    - -
    -
    - -

    ◆ scale_

    - -
    -
    - - - - -
    DEFINE_INPUT_OUTPUT_SHAPE () private float mlx::core::fast::ScaledDotProductAttention::scale_
    -
    -

    The documentation for this class was generated from the following file: - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.js b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.js new file mode 100644 index 000000000..85665e2e5 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention = +[ + [ "ScaledDotProductAttention", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#ab3f78d30e5bb3e76cfe701f2358e4748", null ], + [ "DEFINE_INPUT_OUTPUT_SHAPE", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#a64d2ce4b46b529a6a9ef068947bc623e", null ], + [ "DEFINE_PRINT", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#a6cc2092fa5b8e7585921b8e0f3ec3db7", null ], + [ "eval_cpu", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#ae20851e002f7fcb6d4f97817596f6328", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#ad51666e69f670e286293aff96eb435a9", null ], + [ "eval_gpu", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#a505f38ba93a3499895f5312e0112e73d", null ], + [ "is_equivalent", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html#af08b1294f3f93505a96fdfa85b1edd62", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer-members.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer-members.html index d21e7671a..41521bd9b 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer-members.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::io::FileWriter Member List
    @@ -95,19 +109,24 @@ $(function(){ initResizable(false); });

    This is the complete list of members for mlx::core::io::FileWriter, including all inherited members.

    + + - - - - - + + + + + +
    FileWriter(std::string file_path)mlx::core::io::FileWriterinlineexplicit
    FileWriter(const FileWriter &)=deletemlx::core::io::FileWriter
    FileWriter(FileWriter &&other)mlx::core::io::FileWriterinline
    good() const overridemlx::core::io::FileWriterinlinevirtual
    is_open() const overridemlx::core::io::FileWriterinlinevirtual
    label() const overridemlx::core::io::FileWriterinlinevirtual
    seek(int64_t off, std::ios_base::seekdir way=std::ios_base::beg) overridemlx::core::io::FileWriterinlinevirtual
    tell() overridemlx::core::io::FileWriterinlinevirtual
    write(const char *data, size_t n) overridemlx::core::io::FileWriterinlinevirtual
    ~FileWriter() overridemlx::core::io::FileWriterinline
    ~Writer()=defaultmlx::core::io::Writervirtual
    operator=(const FileWriter &)=deletemlx::core::io::FileWriter
    seek(int64_t off, std::ios_base::seekdir way=std::ios_base::beg) overridemlx::core::io::FileWriterinlinevirtual
    tell() overridemlx::core::io::FileWriterinlinevirtual
    write(const char *data, size_t n) overridemlx::core::io::FileWriterinlinevirtual
    ~FileWriter() overridemlx::core::io::FileWriterinline
    ~Writer()=defaultmlx::core::io::Writervirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.html index f4c458d29..cfa966f1e 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::io::FileWriter Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -110,6 +124,12 @@ Inheritance diagram for mlx::core::io::FileWriter:
    Public Member Functions  FileWriter (std::string file_path)   + FileWriter (const FileWriter &)=delete +  +FileWriteroperator= (const FileWriter &)=delete +  + FileWriter (FileWriter &&other) +   ~FileWriter () override   bool is_open () const override @@ -130,7 +150,7 @@ Public Member Functions

    Constructor & Destructor Documentation

    -

    ◆ FileWriter()

    +

    ◆ FileWriter() [1/3]

    @@ -147,7 +167,57 @@ Public Member Functions -inlineexplicit +inlineexplicit + + +
    + +
    +
    + +

    ◆ FileWriter() [2/3]

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::io::FileWriter::FileWriter (const FileWriter & )
    +
    +delete
    +
    + +
    +
    + +

    ◆ FileWriter() [3/3]

    + +
    +
    + + + +
    + + + + + + + +
    mlx::core::io::FileWriter::FileWriter (FileWriter && other)
    +
    +inline
    @@ -172,7 +242,7 @@ Public Member Functions -inlineoverride +inlineoverride
    @@ -198,7 +268,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -225,7 +295,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -252,13 +322,38 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual

    Implements mlx::core::io::Writer.

    +
    +
    + +

    ◆ operator=()

    + +
    +
    + + + + + +
    + + + + + + + +
    FileWriter & mlx::core::io::FileWriter::operator= (const FileWriter & )
    +
    +delete
    +
    +
    @@ -283,7 +378,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -310,7 +405,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -341,7 +436,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -354,10 +449,13 @@ Public Member Functions
  • mlx/io/load.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.js b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.js new file mode 100644 index 000000000..1cd6e835b --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_file_writer.js @@ -0,0 +1,14 @@ +var classmlx_1_1core_1_1io_1_1_file_writer = +[ + [ "FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html#a40b241ad540ee4aadc3a19a6b1ccfb4d", null ], + [ "FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html#aee57db8516361f17de3cf2087d9a87d9", null ], + [ "FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html#a12b148df8a52136628728b508ee9c55e", null ], + [ "~FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html#ac325f51cd22050b6359056290e8ef42c", null ], + [ "good", "classmlx_1_1core_1_1io_1_1_file_writer.html#a9ec4934b26fb358d699ddce1482b2d54", null ], + [ "is_open", "classmlx_1_1core_1_1io_1_1_file_writer.html#ad5d2ee671a81700cb1658c41309d6676", null ], + [ "label", "classmlx_1_1core_1_1io_1_1_file_writer.html#a5093dce80ff0c51ea036a87e3e5fb456", null ], + [ "operator=", "classmlx_1_1core_1_1io_1_1_file_writer.html#a957211656a13b4c0d126989a9aba3e25", null ], + [ "seek", "classmlx_1_1core_1_1io_1_1_file_writer.html#a9646f4ea048ae58719daeb588e2de433", null ], + [ "tell", "classmlx_1_1core_1_1io_1_1_file_writer.html#aa883a722789c962164fd0ddcc5f6ffc5", null ], + [ "write", "classmlx_1_1core_1_1io_1_1_file_writer.html#abca32838c9886f734d93430c34c07d7f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader-members.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader-members.html index 0f527075d..a56d0de06 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader-members.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::io::ParallelFileReader Member List
    @@ -100,15 +114,17 @@ $(function(){ initResizable(false); }); ParallelFileReader(std::string file_path)mlx::core::io::ParallelFileReaderinlineexplicit read(char *data, size_t n) overridemlx::core::io::ParallelFileReadervirtual read(char *data, size_t n, size_t offset) overridemlx::core::io::ParallelFileReadervirtual - seek(int64_t, std::ios_base::seekdir=std::ios_base::beg) overridemlx::core::io::ParallelFileReaderinlinevirtual + seek(int64_t off, std::ios_base::seekdir way=std::ios_base::beg) overridemlx::core::io::ParallelFileReaderinlinevirtual tell() overridemlx::core::io::ParallelFileReaderinlinevirtual ~ParallelFileReader() overridemlx::core::io::ParallelFileReaderinline ~Reader()=defaultmlx::core::io::Readervirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.html index 56a8776e4..22b96ff1b 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::io::ParallelFileReader Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -118,8 +132,8 @@ Public Member Functions   size_t tell () override   -void seek (int64_t, std::ios_base::seekdir=std::ios_base::beg) override -  +void seek (int64_t off, std::ios_base::seekdir way=std::ios_base::beg) override +  void read (char *data, size_t n) override   void read (char *data, size_t n, size_t offset) override @@ -149,7 +163,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -174,7 +188,7 @@ Public Member Functions -inlineoverride +inlineoverride
    @@ -200,7 +214,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -227,7 +241,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -254,7 +268,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -285,7 +299,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -321,7 +335,7 @@ Public Member Functions -overridevirtual +overridevirtual
    @@ -330,8 +344,8 @@ Public Member Functions
    - -

    ◆ seek()

    + +

    ◆ seek()

    @@ -342,17 +356,17 @@ Public Member Functions void mlx::core::io::ParallelFileReader::seek ( - int64_t , + int64_t off, - std::ios_base::seekdir = std::ios_base::beg ) + std::ios_base::seekdir way = std::ios_base::beg ) -inlineoverridevirtual +inlineoverridevirtual
    @@ -379,7 +393,7 @@ Public Member Functions -inlineoverridevirtual +inlineoverridevirtual
    @@ -392,10 +406,13 @@ Public Member Functions
  • mlx/io/load.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.js b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.js new file mode 100644 index 000000000..c502a8409 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_parallel_file_reader.js @@ -0,0 +1,12 @@ +var classmlx_1_1core_1_1io_1_1_parallel_file_reader = +[ + [ "ParallelFileReader", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a6cdb4547408f8cbca9e2ddd82514e697", null ], + [ "~ParallelFileReader", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#ae9e3fc1cc3e827dae4d3d107f6780817", null ], + [ "good", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#ac54a2c693acc3d9e6e942412148ffcc9", null ], + [ "is_open", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a653009adbcbce8248bc666df502fdbde", null ], + [ "label", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a361d3b34bc493825c893cce256da46c8", null ], + [ "read", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a6691826fc8d28f83792bfa2f92660a3b", null ], + [ "read", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a2b83b4576f1942db869171cccbf607df", null ], + [ "seek", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a4434ee18ff8bbf1b4fce670a337b535f", null ], + [ "tell", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html#a2e92131428f0ffa98fff781b8c35d9e5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_reader-members.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader-members.html index 5d59ccc9c..f0eb4360f 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_reader-members.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::io::Reader Member List
    @@ -103,10 +117,12 @@ $(function(){ initResizable(false); }); tell()=0mlx::core::io::Readerpure virtual ~Reader()=defaultmlx::core::io::Readervirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.html index 35135ad62..b382307b3 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::io::Reader Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    -
    mlx::core::io::Reader Class Referenceabstract
    +
    mlx::core::io::Reader Class Referenceabstract
    @@ -144,7 +158,7 @@ Public Member Functions -virtualdefault +virtualdefault
    @@ -170,7 +184,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -197,7 +211,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -224,7 +238,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -255,7 +269,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -291,7 +305,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -322,12 +336,12 @@ Public Member Functions -pure virtual +pure virtual
    @@ -349,7 +363,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -362,10 +376,13 @@ Public Member Functions
  • mlx/io/load.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.js b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.js new file mode 100644 index 000000000..fb099dc21 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_reader.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1io_1_1_reader = +[ + [ "~Reader", "classmlx_1_1core_1_1io_1_1_reader.html#a81cd4747d81311c87dc6753f2d0d8b16", null ], + [ "good", "classmlx_1_1core_1_1io_1_1_reader.html#a005d0b52c1f34866f7412b7f41dabec3", null ], + [ "is_open", "classmlx_1_1core_1_1io_1_1_reader.html#a780f504058bd9c80cb3d105046a9f985", null ], + [ "label", "classmlx_1_1core_1_1io_1_1_reader.html#a8c244daf52fd5ebb9a2c7e5f4ae793cd", null ], + [ "read", "classmlx_1_1core_1_1io_1_1_reader.html#ad8d74e2c62b579511089faa4cc6f50a1", null ], + [ "read", "classmlx_1_1core_1_1io_1_1_reader.html#a3e82cc31bd2a8594f19dc9858dca3efc", null ], + [ "seek", "classmlx_1_1core_1_1io_1_1_reader.html#acea55078bd39ccaa27a9a36f17a39cd1", null ], + [ "tell", "classmlx_1_1core_1_1io_1_1_reader.html#a27697ccc1ce45da0233db3bd4f298aed", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_writer-members.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer-members.html index d186945bf..937fb56e1 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_writer-members.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx::core::io::Writer Member List
    @@ -102,10 +116,12 @@ $(function(){ initResizable(false); }); write(const char *data, size_t n)=0mlx::core::io::Writerpure virtual ~Writer()=defaultmlx::core::io::Writervirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.html b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.html index 086f755fa..bdd24c680 100644 --- a/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.html +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::io::Writer Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    -
    mlx::core::io::Writer Class Referenceabstract
    +
    mlx::core::io::Writer Class Referenceabstract
    @@ -142,7 +156,7 @@ Public Member Functions -virtualdefault +virtualdefault
    @@ -168,7 +182,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -195,7 +209,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -222,7 +236,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -253,7 +267,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -280,7 +294,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -311,7 +325,7 @@ Public Member Functions -pure virtual +pure virtual
    @@ -324,10 +338,13 @@ Public Member Functions
  • mlx/io/load.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.js b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.js new file mode 100644 index 000000000..033240da7 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1io_1_1_writer.js @@ -0,0 +1,10 @@ +var classmlx_1_1core_1_1io_1_1_writer = +[ + [ "~Writer", "classmlx_1_1core_1_1io_1_1_writer.html#a0e42f93a64118e9f5ede54ffe1bda045", null ], + [ "good", "classmlx_1_1core_1_1io_1_1_writer.html#a0b050c2c27487007e250e2e19560ffe4", null ], + [ "is_open", "classmlx_1_1core_1_1io_1_1_writer.html#a85aa36bdb0dbfb8c5b6cfd955b03417a", null ], + [ "label", "classmlx_1_1core_1_1io_1_1_writer.html#a828125a9adcb7e90c8bcaba0fe47f854", null ], + [ "seek", "classmlx_1_1core_1_1io_1_1_writer.html#a9c1716dda53aa36faea9c8fb1a3e34d4", null ], + [ "tell", "classmlx_1_1core_1_1io_1_1_writer.html#a11ad80749894993232fbb5c70fd7b282", null ], + [ "write", "classmlx_1_1core_1_1io_1_1_writer.html#ad9515b7f007338674de1e124cf77e125", null ] +]; \ No newline at end of file diff --git a/docs/build/html/struct_cum_prod_3_01bool_01_4-members.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer-members.html similarity index 50% rename from docs/build/html/struct_cum_prod_3_01bool_01_4-members.html rename to docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer-members.html index 319948a6c..423570ac9 100644 --- a/docs/build/html/struct_cum_prod_3_01bool_01_4-members.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    -
    -
    -
    CumProd< bool > Member List
    +
    mlx::core::metal::Buffer Member List
    -

    This is the complete list of members for CumProd< bool >, including all inherited members.

    +

    This is the complete list of members for mlx::core::metal::Buffer, including all inherited members.

    - - - - + + + +
    initCumProd< bool >static
    operator()(bool a, T b)CumProd< bool >inline
    simd_exclusive_scan(bool x)CumProd< bool >inline
    simd_scan(bool x)CumProd< bool >inline
    Buffer(void *ptr)mlx::core::metal::Bufferinline
    ptr() constmlx::core::metal::Bufferinline
    ptr()mlx::core::metal::Bufferinline
    raw_ptr()mlx::core::metal::Buffer
    - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.html new file mode 100644 index 000000000..082e893bc --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.html @@ -0,0 +1,232 @@ + + + + + + + +MLX: mlx::core::metal::Buffer Class Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MLX +
    +
    + +   + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    mlx::core::metal::Buffer Class Reference
    +
    +
    + +

    #include <allocator.h>

    + + + + + + + + + + +

    +Public Member Functions

     Buffer (void *ptr)
     
    void * raw_ptr ()
     
    const void * ptr () const
     
    void * ptr ()
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ Buffer()

    + +
    +
    + + + + + +
    + + + + + + + +
    mlx::core::allocator::Buffer::Buffer (void * ptr)
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ ptr() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    void * mlx::core::allocator::Buffer::ptr ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ ptr() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    const void * mlx::core::allocator::Buffer::ptr () const
    +
    +inline
    +
    + +
    +
    + +

    ◆ raw_ptr()

    + +
    +
    + + + + + + + +
    void * mlx::core::allocator::Buffer::raw_ptr ()
    +
    + +
    +
    +
    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.js b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.js new file mode 100644 index 000000000..e5d07595d --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_buffer.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1metal_1_1_buffer = +[ + [ "Buffer", "classmlx_1_1core_1_1metal_1_1_buffer.html#ac4fc2cc6aa1368cfb74aff329d9a1300", null ], + [ "ptr", "classmlx_1_1core_1_1metal_1_1_buffer.html#acb15b2f057568828ea09635ed968b62a", null ], + [ "ptr", "classmlx_1_1core_1_1metal_1_1_buffer.html#a990643feac06961c5599aac098c17b94", null ], + [ "raw_ptr", "classmlx_1_1core_1_1metal_1_1_buffer.html#a2dfe63e0b4bffeb965cdc50ad4228dbc", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_device-members.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device-members.html index d7b6c9cbc..e17f86c85 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_device-members.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::metal::Device Member List
    @@ -117,10 +131,12 @@ $(function(){ initResizable(false); }); set_residency_set(const MTL::ResidencySet *residency_set)mlx::core::metal::Device ~Device()mlx::core::metal::Device
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.html index 58ff555bf..f72dc521c 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::metal::Device Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -180,7 +194,7 @@ Public Member Functions -delete +delete
    @@ -316,7 +330,7 @@ Public Member Functions -inline +inline
    @@ -502,7 +516,7 @@ Public Member Functions -inline +inline
    @@ -544,7 +558,7 @@ Public Member Functions -delete +delete
    @@ -569,7 +583,7 @@ Public Member Functions -inline +inline
    @@ -618,10 +632,13 @@ Public Member Functions
  • mlx/backend/metal/device.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.js b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.js new file mode 100644 index 000000000..11e5d93df --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_device.js @@ -0,0 +1,25 @@ +var classmlx_1_1core_1_1metal_1_1_device = +[ + [ "Device", "classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6", null ], + [ "Device", "classmlx_1_1core_1_1metal_1_1_device.html#abf59a4addb5473f9e814e3651ba85f06", null ], + [ "~Device", "classmlx_1_1core_1_1metal_1_1_device.html#a4f39c28c6cdd1d2da1918f5871bcba6e", null ], + [ "add_temporaries", "classmlx_1_1core_1_1metal_1_1_device.html#a72ad17c96fc6ce825bc77f0bed657901", null ], + [ "add_temporary", "classmlx_1_1core_1_1metal_1_1_device.html#acb90010af0cffe27fd8cc6c253d3a576", null ], + [ "argument_encoder", "classmlx_1_1core_1_1metal_1_1_device.html#a6e33e2b1287324fb4a6575e0da5e5881", null ], + [ "commit_command_buffer", "classmlx_1_1core_1_1metal_1_1_device.html#a95248f1387824067fd4fed23ace5ac0c", null ], + [ "end_encoding", "classmlx_1_1core_1_1metal_1_1_device.html#a60689f97347811b27e8c5ca23e0372bf", null ], + [ "get_architecture", "classmlx_1_1core_1_1metal_1_1_device.html#a65f64dd8bafdc704d871fc5be5e7bc0b", null ], + [ "get_command_buffer", "classmlx_1_1core_1_1metal_1_1_device.html#a5fe3970fbe92ccc55fce4241ffbe5210", null ], + [ "get_command_buffer_ops", "classmlx_1_1core_1_1metal_1_1_device.html#a064e1cb6a16de7a0619f6447622350f8", null ], + [ "get_command_encoder", "classmlx_1_1core_1_1metal_1_1_device.html#affa682ef612def4890f5152f81ffb7e6", null ], + [ "get_kernel", "classmlx_1_1core_1_1metal_1_1_device.html#afa0cac9d800c21a8a7f6cb224256abaf", null ], + [ "get_kernel", "classmlx_1_1core_1_1metal_1_1_device.html#a6810c4dcbcfbf93fc51d42aa5ff0fc3a", null ], + [ "get_library", "classmlx_1_1core_1_1metal_1_1_device.html#a75ed55e73baf48013028796518723ff0", null ], + [ "increment_command_buffer_ops", "classmlx_1_1core_1_1metal_1_1_device.html#a7a33d4d601423a3d3c23d5ad7072abb6", null ], + [ "mtl_device", "classmlx_1_1core_1_1metal_1_1_device.html#a31dba377f2be44a746db10d1b9367653", null ], + [ "new_queue", "classmlx_1_1core_1_1metal_1_1_device.html#a8135ae2a8c1e6f3861e84d4e60c28b67", null ], + [ "operator=", "classmlx_1_1core_1_1metal_1_1_device.html#ad1d6382fd18a46b1906e1b43e0bd2e73", null ], + [ "register_library", "classmlx_1_1core_1_1metal_1_1_device.html#a99ff72689b7beb65ad4541391b0eeabf", null ], + [ "register_library", "classmlx_1_1core_1_1metal_1_1_device.html#a45945f2efcd242d915ffa2171e92bf9d", null ], + [ "set_residency_set", "classmlx_1_1core_1_1metal_1_1_device.html#a03a2f0c712660a1bd437cb16e4aba79f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator-members.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator-members.html index e9ccf2bca..ccb278380 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator-members.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::metal::MetalAllocator Member List
    @@ -113,10 +127,12 @@ $(function(){ initResizable(false); }); size(Buffer buffer) const overridemlx::core::metal::MetalAllocatorvirtual ~Allocator()=defaultmlx::core::allocator::Allocatorvirtual
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.html index 4209fcea5..41f2db306 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::metal::MetalAllocator Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -187,7 +201,7 @@ Friends -overridevirtual +overridevirtual
    @@ -214,7 +228,7 @@ Friends -inline +inline
    @@ -239,7 +253,7 @@ Friends -inline +inline
    @@ -264,7 +278,7 @@ Friends -inline +inline
    @@ -293,7 +307,7 @@ Friends -overridevirtual +overridevirtual
    @@ -322,7 +336,7 @@ Friends -inline +inline
    @@ -402,7 +416,7 @@ Friends -overridevirtual +overridevirtual
    @@ -430,7 +444,7 @@ Friends -friend +friend
    @@ -441,10 +455,13 @@ Friends
  • mlx/backend/metal/allocator.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.js b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.js new file mode 100644 index 000000000..7e32f4d3e --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_metal_allocator.js @@ -0,0 +1,15 @@ +var classmlx_1_1core_1_1metal_1_1_metal_allocator = +[ + [ "clear_cache", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a447c1eb38c00d2e8e521675297f4a9b1", null ], + [ "free", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a109a0a37fb0b3be381a62dc3b1a54bf0", null ], + [ "get_active_memory", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a7a3ad4e33d57a47474c98e2f88e775d7", null ], + [ "get_cache_memory", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#ad3cabbe638917ca4114eb74dcabe381f", null ], + [ "get_peak_memory", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#ac7972a3fe58e69489de775a0f152da17", null ], + [ "malloc", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a6c0feb9b1ff9977f76c69745393944bc", null ], + [ "reset_peak_memory", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a26b9c8ac7ed56c3bb7ddc194009ec5a6", null ], + [ "set_cache_limit", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#af392bced29d9e4e3f1a7cc4725d83764", null ], + [ "set_memory_limit", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a179e3127ef9377ce54295f771c34ba1b", null ], + [ "set_wired_limit", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a84fa0347da18055bc13ba0a5c4b57253", null ], + [ "size", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a51f6587e8065be16f0418ca42a796e05", null ], + [ "allocator", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html#afa1c5a725309caff163c492b5b84491e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set-members.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set-members.html index e5aef6b04..7577caa2a 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set-members.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::metal::ResidencySet Member List
    @@ -103,10 +117,12 @@ $(function(){ initResizable(false); }); resize(size_t size)mlx::core::metal::ResidencySet ~ResidencySet()mlx::core::metal::ResidencySet
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.html b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.html index fdf729e36..8d3ba1e2a 100644 --- a/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.html +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::metal::ResidencySet Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -109,9 +123,9 @@ Public Member Functions   const MTL::ResidencySet * mtl_residency_set ()   -void insert (MTL::Allocation *buf) +void insert (MTL::Allocation *buf)   -void erase (MTL::Allocation *buf) +void erase (MTL::Allocation *buf)   void resize (size_t size)   @@ -169,7 +183,7 @@ Public Member Functions -delete +delete
    @@ -229,7 +243,7 @@ Public Member Functions -inline +inline
    @@ -254,7 +268,7 @@ Public Member Functions -delete +delete
    @@ -282,10 +296,13 @@ Public Member Functions
  • mlx/backend/metal/resident.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.js b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.js new file mode 100644 index 000000000..3d808a4cb --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1metal_1_1_residency_set.js @@ -0,0 +1,11 @@ +var classmlx_1_1core_1_1metal_1_1_residency_set = +[ + [ "ResidencySet", "classmlx_1_1core_1_1metal_1_1_residency_set.html#abb69d020da017a7e52e9e3903b877eec", null ], + [ "~ResidencySet", "classmlx_1_1core_1_1metal_1_1_residency_set.html#a998f07776f489bea9a7dd3c290ea7a79", null ], + [ "ResidencySet", "classmlx_1_1core_1_1metal_1_1_residency_set.html#aabbf8c16f269f38e4c38097b947d18b7", null ], + [ "erase", "classmlx_1_1core_1_1metal_1_1_residency_set.html#ae136ad270522210c85c13cacf5165238", null ], + [ "insert", "classmlx_1_1core_1_1metal_1_1_residency_set.html#aaafe1a4305a107d4bcdd4f35d3df09b3", null ], + [ "mtl_residency_set", "classmlx_1_1core_1_1metal_1_1_residency_set.html#ac4bfe5ef5e2eaebc458a1ed1953d15e9", null ], + [ "operator=", "classmlx_1_1core_1_1metal_1_1_residency_set.html#aef97dbbc755940789f99a26164591c45", null ], + [ "resize", "classmlx_1_1core_1_1metal_1_1_residency_set.html#a0364647bca4324ac41ea3900925a69b5", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence-members.html b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence-members.html index a9a96db6e..282244c9f 100644 --- a/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence-members.html +++ b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::random::KeySequence Member List
    @@ -99,10 +113,12 @@ $(function(){ initResizable(false); }); next()mlx::core::random::KeySequence seed(uint64_t seed)mlx::core::random::KeySequence
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.html b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.html index dd96ce6ed..e0f08be25 100644 --- a/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.html +++ b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::random::KeySequence Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -131,7 +145,7 @@ Static Public Member Functions -explicit +explicit
    @@ -157,7 +171,7 @@ Static Public Member Functions -inlinestatic +inlinestatic
    @@ -202,10 +216,13 @@ Static Public Member Functions
  • mlx/random.h
  • - -
    + + diff --git a/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.js b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.js new file mode 100644 index 000000000..57b8e73f4 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1random_1_1_key_sequence.js @@ -0,0 +1,7 @@ +var classmlx_1_1core_1_1random_1_1_key_sequence = +[ + [ "KeySequence", "classmlx_1_1core_1_1random_1_1_key_sequence.html#a196eb6ce5ba1eb37cc8c67d6d1332bfe", null ], + [ "default_", "classmlx_1_1core_1_1random_1_1_key_sequence.html#ab5993daeed822c6b970caddab7e3fd90", null ], + [ "next", "classmlx_1_1core_1_1random_1_1_key_sequence.html#a4193c5eac3ef093a740d5305b25d3e18", null ], + [ "seed", "classmlx_1_1core_1_1random_1_1_key_sequence.html#a9f19c5da2031cba50d0ff996924347d8", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler-members.html b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler-members.html index a0125ac75..a0a8327d8 100644 --- a/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler-members.html +++ b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    mlx::core::scheduler::Scheduler Member List
    @@ -96,23 +110,26 @@ $(function(){ initResizable(false); }); - - - - - - - - - - - - + + + + + + + + + + + + +
    enqueue(const Stream &stream, F &&f)mlx::core::scheduler::Scheduler
    get_default_stream(const Device &d) constmlx::core::scheduler::Schedulerinline
    n_active_tasks() constmlx::core::scheduler::Schedulerinline
    new_stream(const Device &d)mlx::core::scheduler::Schedulerinline
    notify_new_task(const Stream &stream)mlx::core::scheduler::Schedulerinline
    notify_task_completion(const Stream &stream)mlx::core::scheduler::Schedulerinline
    operator=(const Scheduler &)=deletemlx::core::scheduler::Scheduler
    operator=(Scheduler &&)=deletemlx::core::scheduler::Scheduler
    Scheduler()mlx::core::scheduler::Schedulerinline
    Scheduler(const Scheduler &)=deletemlx::core::scheduler::Scheduler
    Scheduler(Scheduler &&)=deletemlx::core::scheduler::Scheduler
    set_default_stream(const Stream &s)mlx::core::scheduler::Schedulerinline
    wait_for_one()mlx::core::scheduler::Schedulerinline
    ~Scheduler()mlx::core::scheduler::Schedulerinline
    get_stream(int index) constmlx::core::scheduler::Schedulerinline
    n_active_tasks() constmlx::core::scheduler::Schedulerinline
    new_stream(const Device &d)mlx::core::scheduler::Schedulerinline
    notify_new_task(const Stream &stream)mlx::core::scheduler::Schedulerinline
    notify_task_completion(const Stream &stream)mlx::core::scheduler::Schedulerinline
    operator=(const Scheduler &)=deletemlx::core::scheduler::Scheduler
    operator=(Scheduler &&)=deletemlx::core::scheduler::Scheduler
    Scheduler()mlx::core::scheduler::Schedulerinline
    Scheduler(const Scheduler &)=deletemlx::core::scheduler::Scheduler
    Scheduler(Scheduler &&)=deletemlx::core::scheduler::Scheduler
    set_default_stream(const Stream &s)mlx::core::scheduler::Schedulerinline
    wait_for_one()mlx::core::scheduler::Schedulerinline
    ~Scheduler()mlx::core::scheduler::Schedulerinline
    - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.html b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.html index f43d107d4..263c896b3 100644 --- a/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.html +++ b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.html @@ -3,7 +3,7 @@ - + MLX: mlx::core::scheduler::Scheduler Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -111,11 +125,13 @@ Public Member Functions   Stream new_stream (const Device &d)   -template<typename F > -void enqueue (const Stream &stream, F &&f) +template<typename F> +void enqueue (const Stream &stream, F &&f)   Stream get_default_stream (const Device &d) const   +Stream get_stream (int index) const +  void set_default_stream (const Stream &s)   void notify_new_task (const Stream &stream) @@ -148,7 +164,7 @@ Public Member Functions -inline +inline
    @@ -173,7 +189,7 @@ Public Member Functions -delete +delete
    @@ -198,7 +214,7 @@ Public Member Functions -delete +delete
    @@ -223,7 +239,7 @@ Public Member Functions -inline +inline
    @@ -237,7 +253,7 @@ Public Member Functions
    -template<typename F >
    +template<typename F>
    @@ -272,7 +288,32 @@ template<typename F >
    void mlx::core::scheduler::Scheduler::enqueue
    -inline +inline + + +
    + +
    +
    + +

    ◆ get_stream()

    + +
    +
    + + + +
    + + + + + + + +
    Stream mlx::core::scheduler::Scheduler::get_stream (int index) const
    +
    +inline
    @@ -297,7 +338,7 @@ template<typename F >
    -inline +inline
    @@ -322,7 +363,7 @@ template<typename F >
    -inline +inline
    @@ -347,7 +388,7 @@ template<typename F >
    -inline +inline
    @@ -372,7 +413,7 @@ template<typename F >
    -inline +inline
    @@ -397,7 +438,7 @@ template<typename F >
    -delete +delete
    @@ -422,7 +463,7 @@ template<typename F >
    -delete +delete
    @@ -447,7 +488,7 @@ template<typename F >
    -inline +inline
    @@ -472,7 +513,7 @@ template<typename F >
    -inline +inline
    @@ -483,10 +524,13 @@ template<typename F >
  • mlx/scheduler.h
  • - - + + diff --git a/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.js b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.js new file mode 100644 index 000000000..b4bb9e169 --- /dev/null +++ b/docs/build/html/classmlx_1_1core_1_1scheduler_1_1_scheduler.js @@ -0,0 +1,18 @@ +var classmlx_1_1core_1_1scheduler_1_1_scheduler = +[ + [ "Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a3ae42aed78a2200e9d02776fcd2316ba", null ], + [ "Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a61a74e3628899e66dde600e24a750648", null ], + [ "Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#ac3f77b7c93220dadd0b3bb2e903b7059", null ], + [ "~Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a6626c4a743a2b3004fc14042bc8b0edf", null ], + [ "enqueue", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a03809c783bd1866362dc7cb9118abbcc", null ], + [ "get_default_stream", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a2366c7b888e433608e203752edc92282", null ], + [ "get_stream", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#aa6726858b362c7cd1f8a846a63085dbc", null ], + [ "n_active_tasks", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a3c9fa21442974acba3409d49bb033131", null ], + [ "new_stream", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a157c8da85fa1bddb8eacf8515a3cc879", null ], + [ "notify_new_task", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#ae8aa34a9be8bc73508dd500000421173", null ], + [ "notify_task_completion", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#abbb2b1c2f8bae2b9c7cc51db65f18a3b", null ], + [ "operator=", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#ab170dbd2ce34c51e2eeebf5d08e7e2db", null ], + [ "operator=", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a035ea35f4dd8ee985973080f14029379", null ], + [ "set_default_stream", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a6d15314ac9cf25efc9bd1278de9a66bb", null ], + [ "wait_for_one", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html#a01c574bb388f10d67aaaaa541894d807", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23-members.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23-members.html index c1257f5f3..7b1729e31 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::T_dcst23< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::T_dcst23< T0 >inline T_dcst23(size_t length)pocketfft::detail::T_dcst23< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.html index eedb0f5c7..098ee6107 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::T_dcst23< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  T_dcst23 (size_t length)   -template<typename T > +template<typename T> void exec (T c[], T0 fct, bool ortho, int type, bool cosine) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -177,7 +191,7 @@ template<typename T >
    -inline +inline
    @@ -190,7 +204,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -204,7 +218,7 @@ template<typename T0 >
    -inline +inline
    @@ -215,10 +229,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.js b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.js new file mode 100644 index 000000000..a1a317528 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst23.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1_t__dcst23 = +[ + [ "T_dcst23", "classpocketfft_1_1detail_1_1_t__dcst23.html#a7cbe3fd1b64383d8b466bcdc2f594900", null ], + [ "exec", "classpocketfft_1_1detail_1_1_t__dcst23.html#a2a45b7b4612904c2be69c01f6d5029ac", null ], + [ "length", "classpocketfft_1_1detail_1_1_t__dcst23.html#a6dab012b487ff98d11b8a9418653a478", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4-members.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4-members.html index 4309f09cf..e2bdec203 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::T_dcst4< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::T_dcst4< T0 >inline T_dcst4(size_t length)pocketfft::detail::T_dcst4< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.html index 50ec8b4c4..7953b5c4a 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::T_dcst4< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  T_dcst4 (size_t length)   -template<typename T > +template<typename T> void exec (T c[], T0 fct, bool, int, bool cosine) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -177,7 +191,7 @@ template<typename T >
    -inline +inline
    @@ -190,7 +204,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -204,7 +218,7 @@ template<typename T0 >
    -inline +inline
    @@ -215,10 +229,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.js b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.js new file mode 100644 index 000000000..34f6a549f --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dcst4.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1_t__dcst4 = +[ + [ "T_dcst4", "classpocketfft_1_1detail_1_1_t__dcst4.html#a4a623ebc5dfe8c3cad153c642663099b", null ], + [ "exec", "classpocketfft_1_1detail_1_1_t__dcst4.html#af794ebf21009d5f918681188081df708", null ], + [ "length", "classpocketfft_1_1detail_1_1_t__dcst4.html#af25bf28a7ccd4690ca9934e3aa79c12f", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1-members.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1-members.html index 7689a6ef9..ad4439eee 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::T_dct1< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::T_dct1< T0 >inline T_dct1(size_t length)pocketfft::detail::T_dct1< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.html index 0cdf55cba..b5b9b7aa4 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::T_dct1< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  T_dct1 (size_t length)   -template<typename T > +template<typename T> void exec (T c[], T0 fct, bool ortho, int, bool) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -177,7 +191,7 @@ template<typename T >
    -inline +inline
    @@ -190,7 +204,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -204,7 +218,7 @@ template<typename T0 >
    -inline +inline
    @@ -215,10 +229,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.js b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.js new file mode 100644 index 000000000..214616e7f --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dct1.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1_t__dct1 = +[ + [ "T_dct1", "classpocketfft_1_1detail_1_1_t__dct1.html#ac153e82c8bf0943638a88486e35c16d6", null ], + [ "exec", "classpocketfft_1_1detail_1_1_t__dct1.html#a7736111ff9d220f983e41a6fecd5f058", null ], + [ "length", "classpocketfft_1_1detail_1_1_t__dct1.html#ac7a04c91d507bd8f173d2266bb5bb168", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1-members.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1-members.html index 5d4744b39..02941ecaf 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::T_dst1< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::T_dst1< T0 >inline T_dst1(size_t length)pocketfft::detail::T_dst1< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.html b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.html index cdb424251..68c4948df 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::T_dst1< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  T_dst1 (size_t length)   -template<typename T > +template<typename T> void exec (T c[], T0 fct, bool, int, bool) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -177,7 +191,7 @@ template<typename T >
    -inline +inline
    @@ -190,7 +204,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -204,7 +218,7 @@ template<typename T0 >
    -inline +inline
    @@ -215,10 +229,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.js b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.js new file mode 100644 index 000000000..ea0911ca6 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1_t__dst1.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1_t__dst1 = +[ + [ "T_dst1", "classpocketfft_1_1detail_1_1_t__dst1.html#ad0b6647266ef0e87d34730774b92da84", null ], + [ "exec", "classpocketfft_1_1detail_1_1_t__dst1.html#a598a9511004263eb3610053d7efc9e26", null ], + [ "length", "classpocketfft_1_1detail_1_1_t__dst1.html#ab205d901650e38b592ff860b7978fa3e", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr-members.html b/docs/build/html/classpocketfft_1_1detail_1_1arr-members.html index 4b5879daa..1c8ffb725 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1arr-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::arr< T > Member List
    @@ -105,10 +119,12 @@ $(function(){ initResizable(false); }); size() constpocketfft::detail::arr< T >inline ~arr()pocketfft::detail::arr< T >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr.html b/docs/build/html/classpocketfft_1_1detail_1_1arr.html index 4c1090c76..eda2acf29 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1arr.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::arr< T > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions
    -template<typename T >
    +template<typename T>
    @@ -141,7 +155,7 @@ template<typename T >
    -inline +inline
    @@ -154,7 +168,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -168,7 +182,7 @@ template<typename T >
    -inline +inline
    @@ -181,7 +195,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -195,7 +209,7 @@ template<typename T >
    -inline +inline
    @@ -208,7 +222,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -222,7 +236,7 @@ template<typename T >
    -inline +inline
    @@ -236,7 +250,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -250,7 +264,7 @@ template<typename T >
    -inline +inline
    @@ -263,7 +277,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -277,7 +291,7 @@ template<typename T >
    -inline +inline
    @@ -290,7 +304,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -304,7 +318,7 @@ template<typename T >
    -inline +inline
    @@ -317,7 +331,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -331,7 +345,7 @@ template<typename T >
    -inline +inline
    @@ -344,7 +358,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -358,7 +372,7 @@ template<typename T >
    -inline +inline
    @@ -371,7 +385,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -385,7 +399,7 @@ template<typename T >
    -inline +inline
    @@ -396,10 +410,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr.js b/docs/build/html/classpocketfft_1_1detail_1_1arr.js new file mode 100644 index 000000000..216c747f8 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr.js @@ -0,0 +1,13 @@ +var classpocketfft_1_1detail_1_1arr = +[ + [ "arr", "classpocketfft_1_1detail_1_1arr.html#a961a24410638b35129cd6b81850d2a42", null ], + [ "arr", "classpocketfft_1_1detail_1_1arr.html#a04f832b780a4453fdf3b69bf75b182bd", null ], + [ "arr", "classpocketfft_1_1detail_1_1arr.html#a0cd8fb4a588a74d428a7349d38b477d0", null ], + [ "~arr", "classpocketfft_1_1detail_1_1arr.html#a8519487ee7fa95d3937a8352dd289b56", null ], + [ "data", "classpocketfft_1_1detail_1_1arr.html#aec0f2191b4663b4187aab92454c34de8", null ], + [ "data", "classpocketfft_1_1detail_1_1arr.html#ac82daa17e9f991072b012343f9d7c182", null ], + [ "operator[]", "classpocketfft_1_1detail_1_1arr.html#aea0bd899b19e03f54dfd6c188727061a", null ], + [ "operator[]", "classpocketfft_1_1detail_1_1arr.html#a99c54f96bc79c7cdd8925c1663462842", null ], + [ "resize", "classpocketfft_1_1detail_1_1arr.html#a8d73baaefa02dff8714e4398c83917e0", null ], + [ "size", "classpocketfft_1_1detail_1_1arr.html#a95bca00060957f540ff25b69632c6952", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr__info-members.html b/docs/build/html/classpocketfft_1_1detail_1_1arr__info-members.html index 93c1b7e7a..6005a99c2 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1arr__info-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr__info-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::arr_info Member List
    @@ -104,10 +118,12 @@ $(function(){ initResizable(false); }); stride() constpocketfft::detail::arr_infoinline stride(size_t i) constpocketfft::detail::arr_infoinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr__info.html b/docs/build/html/classpocketfft_1_1detail_1_1arr__info.html index cc9d24d04..da0f22732 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1arr__info.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr__info.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::arr_info Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -155,7 +169,7 @@ Protected Attributes -inline +inline
    @@ -181,7 +195,7 @@ Protected Attributes -inline +inline
    @@ -206,7 +220,7 @@ Protected Attributes -inline +inline
    @@ -231,7 +245,7 @@ Protected Attributes -inline +inline
    @@ -256,7 +270,7 @@ Protected Attributes -inline +inline
    @@ -281,7 +295,7 @@ Protected Attributes -inline +inline
    @@ -306,7 +320,7 @@ Protected Attributes -inline +inline
    @@ -329,7 +343,7 @@ Protected Attributes -protected +protected
    @@ -351,7 +365,7 @@ Protected Attributes -protected +protected
    @@ -362,10 +376,13 @@ Protected Attributes
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1arr__info.js b/docs/build/html/classpocketfft_1_1detail_1_1arr__info.js new file mode 100644 index 000000000..1f9660187 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1arr__info.js @@ -0,0 +1,12 @@ +var classpocketfft_1_1detail_1_1arr__info = +[ + [ "arr_info", "classpocketfft_1_1detail_1_1arr__info.html#a0dbddb7d86ca306159fc9ef9a453b21e", null ], + [ "ndim", "classpocketfft_1_1detail_1_1arr__info.html#ac608c8af2a59a28a0012e308be7ee414", null ], + [ "shape", "classpocketfft_1_1detail_1_1arr__info.html#accada8146cb8d3ab7facb4c1e3413ec0", null ], + [ "shape", "classpocketfft_1_1detail_1_1arr__info.html#ac601c660c64a4c252aa8be4ae7dfa7a8", null ], + [ "size", "classpocketfft_1_1detail_1_1arr__info.html#a003a7106f7fa59a3c55ac1f0116313a5", null ], + [ "stride", "classpocketfft_1_1detail_1_1arr__info.html#a9d10aa83a1117e75d36f7396b8c2a093", null ], + [ "stride", "classpocketfft_1_1detail_1_1arr__info.html#ac1f6a9bd6703eceef6003f5f6315d39b", null ], + [ "shp", "classpocketfft_1_1detail_1_1arr__info.html#a2467e9e01de1ba4d7cd28c1af783da8d", null ], + [ "str", "classpocketfft_1_1detail_1_1arr__info.html#abe1f7b92501b4e0e5a38fd26294ac5a4", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cfftp-members.html b/docs/build/html/classpocketfft_1_1detail_1_1cfftp-members.html index e26d8b1c9..710be0a32 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1cfftp-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1cfftp-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::cfftp< T0 > Member List
    @@ -97,10 +111,12 @@ $(function(){ initResizable(false); }); cfftp(size_t length_)pocketfft::detail::cfftp< T0 >inline exec(T c[], T0 fct, bool fwd) constpocketfft::detail::cfftp< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cfftp.html b/docs/build/html/classpocketfft_1_1detail_1_1cfftp.html index 0f184e0e4..c76d583cc 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1cfftp.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1cfftp.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::cfftp< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -99,7 +113,7 @@ $(function(){ initResizable(false); }); - + @@ -112,7 +126,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>

    Public Member Functions

    template<typename T >
    template<typename T>
    void exec (T c[], T0 fct, bool fwd) const
     
     cfftp (size_t length_)
    @@ -126,7 +140,7 @@ template<typename T0 >
    -inline +inline
    @@ -140,9 +154,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -165,7 +179,7 @@ template<typename T >
    -inline +inline
    @@ -176,10 +190,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cfftp.js b/docs/build/html/classpocketfft_1_1detail_1_1cfftp.js new file mode 100644 index 000000000..60f940e93 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1cfftp.js @@ -0,0 +1,5 @@ +var classpocketfft_1_1detail_1_1cfftp = +[ + [ "cfftp", "classpocketfft_1_1detail_1_1cfftp.html#a121dcd8d4db180061d09fc1c5eb7da27", null ], + [ "exec", "classpocketfft_1_1detail_1_1cfftp.html#a95211024bf007d27e700835db556fbd2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cndarr-members.html b/docs/build/html/classpocketfft_1_1detail_1_1cndarr-members.html index 410b4b108..0f1eb2663 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1cndarr-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1cndarr-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::cndarr< T > Member List
    @@ -107,10 +121,12 @@ $(function(){ initResizable(false); }); stride() constpocketfft::detail::arr_infoinline stride(size_t i) constpocketfft::detail::arr_infoinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cndarr.html b/docs/build/html/classpocketfft_1_1detail_1_1cndarr.html index fa077ecb1..8a2debf54 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1cndarr.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1cndarr.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::cndarr< T > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -147,7 +161,7 @@ Protected Attributes
    -template<typename T >
    +template<typename T>
    @@ -170,7 +184,7 @@ template<typename T >
    -inline +inline
    @@ -184,7 +198,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -198,7 +212,7 @@ template<typename T >
    -inline +inline
    @@ -212,7 +226,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -223,7 +237,7 @@ template<typename T >
    -protected +protected
    @@ -234,10 +248,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1cndarr.js b/docs/build/html/classpocketfft_1_1detail_1_1cndarr.js new file mode 100644 index 000000000..65f0d54cd --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1cndarr.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1cndarr = +[ + [ "cndarr", "classpocketfft_1_1detail_1_1cndarr.html#abf73f1b4ddcfb27d7f85cfa441607129", null ], + [ "operator[]", "classpocketfft_1_1detail_1_1cndarr.html#ae4852d1fe936a5d61832b507816c7054", null ], + [ "d", "classpocketfft_1_1detail_1_1cndarr.html#ac29c769aebb03f81fbcf16ba6e766af2", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1fftblue-members.html b/docs/build/html/classpocketfft_1_1detail_1_1fftblue-members.html index a83c7af52..18ef9e85b 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1fftblue-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1fftblue-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::fftblue< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); exec_r(T c[], T0 fct, bool fwd)pocketfft::detail::fftblue< T0 >inline fftblue(size_t length)pocketfft::detail::fftblue< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1fftblue.html b/docs/build/html/classpocketfft_1_1detail_1_1fftblue.html index 40d7827ac..57f89c206 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1fftblue.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1fftblue.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::fftblue< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,10 +115,10 @@ $(function(){ initResizable(false); }); Public Member Functions  fftblue (size_t length)   -template<typename T > +template<typename T> void exec (cmplx< T > c[], T0 fct, bool fwd) const   -template<typename T > +template<typename T> void exec_r (T c[], T0 fct, bool fwd)   @@ -115,7 +129,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -129,7 +143,7 @@ template<typename T0 >
    -inline +inline
    @@ -143,9 +157,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -168,7 +182,7 @@ template<typename T >
    -inline +inline
    @@ -181,9 +195,9 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -206,7 +220,7 @@ template<typename T >
    -inline +inline
    @@ -217,10 +231,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1fftblue.js b/docs/build/html/classpocketfft_1_1detail_1_1fftblue.js new file mode 100644 index 000000000..da9aacaa0 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1fftblue.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1fftblue = +[ + [ "fftblue", "classpocketfft_1_1detail_1_1fftblue.html#a8613b2131e7843bbca9e1cd4cc15bc01", null ], + [ "exec", "classpocketfft_1_1detail_1_1fftblue.html#a5fb03413a3d1a653842875adcf87ae8c", null ], + [ "exec_r", "classpocketfft_1_1detail_1_1fftblue.html#a642b4aff0485c7d9c8794161a1464f00", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1multi__iter-members.html b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter-members.html index e384056c6..a42c1c0d1 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1multi__iter-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::multi_iter< N > Member List
    @@ -106,10 +120,12 @@ $(function(){ initResizable(false); }); stride_in() constpocketfft::detail::multi_iter< N >inline stride_out() constpocketfft::detail::multi_iter< N >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.html b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.html index 467de7c22..05c0a5fa5 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::multi_iter< N > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -152,7 +166,7 @@ template<size_t N>
    -inline +inline
    @@ -180,7 +194,7 @@ template<size_t N>
    -inline +inline
    @@ -207,7 +221,7 @@ template<size_t N>
    -inline +inline
    @@ -238,7 +252,7 @@ template<size_t N>
    -inline +inline
    @@ -265,7 +279,7 @@ template<size_t N>
    -inline +inline
    @@ -292,7 +306,7 @@ template<size_t N>
    -inline +inline
    @@ -319,7 +333,7 @@ template<size_t N>
    -inline +inline
    @@ -350,7 +364,7 @@ template<size_t N>
    -inline +inline
    @@ -377,7 +391,7 @@ template<size_t N>
    -inline +inline
    @@ -404,7 +418,7 @@ template<size_t N>
    -inline +inline
    @@ -431,7 +445,7 @@ template<size_t N>
    -inline +inline
    @@ -442,10 +456,13 @@ template<size_t N>
  • mlx/3rdparty/pocketfft.h
  • - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.js b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.js new file mode 100644 index 000000000..7572c0aa6 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1multi__iter.js @@ -0,0 +1,14 @@ +var classpocketfft_1_1detail_1_1multi__iter = +[ + [ "multi_iter", "classpocketfft_1_1detail_1_1multi__iter.html#a9be43bb18840202da6d17988fccc64b9", null ], + [ "advance", "classpocketfft_1_1detail_1_1multi__iter.html#a5ddcc0666125b3cb6c0d62b30befdd2c", null ], + [ "iofs", "classpocketfft_1_1detail_1_1multi__iter.html#ad33360d4a8ab8e6d72efadc6f9cb5bfa", null ], + [ "iofs", "classpocketfft_1_1detail_1_1multi__iter.html#a97462d97bdca6419d8d2f37c2031fe83", null ], + [ "length_in", "classpocketfft_1_1detail_1_1multi__iter.html#a5318b79d934cddf109dff7bf96a330c8", null ], + [ "length_out", "classpocketfft_1_1detail_1_1multi__iter.html#a93cd515d07cd479138a35da9df66bd41", null ], + [ "oofs", "classpocketfft_1_1detail_1_1multi__iter.html#aae63e67caac095d474ddd32daa5ffa34", null ], + [ "oofs", "classpocketfft_1_1detail_1_1multi__iter.html#a9236047e7419e5d21379cbf95eb3a78e", null ], + [ "remaining", "classpocketfft_1_1detail_1_1multi__iter.html#a034d12f842df90e6471dffd3fa6ba4bd", null ], + [ "stride_in", "classpocketfft_1_1detail_1_1multi__iter.html#ac947f03b1cfcb63436a7e61ff020a88c", null ], + [ "stride_out", "classpocketfft_1_1detail_1_1multi__iter.html#a81d71a13bf0b85e556fbb9834167ecc7", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1ndarr-members.html b/docs/build/html/classpocketfft_1_1detail_1_1ndarr-members.html index d1147678c..738760d4f 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1ndarr-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1ndarr-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::ndarr< T > Member List
    @@ -109,10 +123,12 @@ $(function(){ initResizable(false); }); stride() constpocketfft::detail::arr_infoinline stride(size_t i) constpocketfft::detail::arr_infoinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1ndarr.html b/docs/build/html/classpocketfft_1_1detail_1_1ndarr.html index 3ea3daac1..cdbab3bd1 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1ndarr.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1ndarr.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::ndarr< T > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -152,7 +166,7 @@ Additional Inherited Members
    -template<typename T >
    +template<typename T>
    @@ -175,7 +189,7 @@ template<typename T >
    -inline +inline
    @@ -189,7 +203,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -203,7 +217,7 @@ template<typename T >
    -inline +inline
    @@ -214,10 +228,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1ndarr.js b/docs/build/html/classpocketfft_1_1detail_1_1ndarr.js new file mode 100644 index 000000000..005c7652e --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1ndarr.js @@ -0,0 +1,5 @@ +var classpocketfft_1_1detail_1_1ndarr = +[ + [ "ndarr", "classpocketfft_1_1detail_1_1ndarr.html#a8f0037a172d96cb1ad915a5069175fa2", null ], + [ "operator[]", "classpocketfft_1_1detail_1_1ndarr.html#a2b2c4e205e8b5c32c9fe55dfd7b8c8d8", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c-members.html b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c-members.html index 90cd9cecb..566ef21cc 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::pocketfft_c< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::pocketfft_c< T0 >inline pocketfft_c(size_t length)pocketfft::detail::pocketfft_c< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.html b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.html index dcedfd1de..a54aaec17 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::pocketfft_c< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  pocketfft_c (size_t length)   -template<typename T > +template<typename T> void exec (cmplx< T > c[], T0 fct, bool fwd) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -167,7 +181,7 @@ template<typename T >
    -inline +inline
    @@ -180,7 +194,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -194,7 +208,7 @@ template<typename T0 >
    -inline +inline
    @@ -205,10 +219,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.js b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.js new file mode 100644 index 000000000..d65203a32 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__c.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1pocketfft__c = +[ + [ "pocketfft_c", "classpocketfft_1_1detail_1_1pocketfft__c.html#a44f46cf06f572b42ad8b53c7c6f38e4d", null ], + [ "exec", "classpocketfft_1_1detail_1_1pocketfft__c.html#a436afd63e8e130f97aff103ae964a45d", null ], + [ "length", "classpocketfft_1_1detail_1_1pocketfft__c.html#a1fd1a2f9b3ae5ee9f00b9ca6946eb16d", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r-members.html b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r-members.html index e20d32310..bd81f0143 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::pocketfft_r< T0 > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); length() constpocketfft::detail::pocketfft_r< T0 >inline pocketfft_r(size_t length)pocketfft::detail::pocketfft_r< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.html b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.html index eafb3d301..13dfb0938 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::pocketfft_r< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -101,7 +115,7 @@ $(function(){ initResizable(false); }); Public Member Functions  pocketfft_r (size_t length)   -template<typename T > +template<typename T> void exec (T c[], T0 fct, bool fwd) const   size_t length () const @@ -114,7 +128,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>
    @@ -128,7 +142,7 @@ template<typename T0 >
    -inline +inline
    @@ -142,9 +156,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -167,7 +181,7 @@ template<typename T >
    -inline +inline
    @@ -180,7 +194,7 @@ template<typename T >
    -template<typename T0 >
    +template<typename T0>
    @@ -194,7 +208,7 @@ template<typename T0 >
    -inline +inline
    @@ -205,10 +219,13 @@ template<typename T0 >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.js b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.js new file mode 100644 index 000000000..a38c81611 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1pocketfft__r.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1pocketfft__r = +[ + [ "pocketfft_r", "classpocketfft_1_1detail_1_1pocketfft__r.html#a60e9b3d1f9b20ec5b86d46b0398f6f7d", null ], + [ "exec", "classpocketfft_1_1detail_1_1pocketfft__r.html#a2815bc8aa04fa986834b02e502f98b33", null ], + [ "length", "classpocketfft_1_1detail_1_1pocketfft__r.html#a83222fdbf81a7c6d560e0841cdfca8c6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rev__iter-members.html b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter-members.html index 8da40d699..8216e85b8 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1rev__iter-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::rev_iter Member List
    @@ -100,10 +114,12 @@ $(function(){ initResizable(false); }); rev_iter(const arr_info &arr_, const shape_t &axes)pocketfft::detail::rev_iterinline rev_ofs() constpocketfft::detail::rev_iterinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.html b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.html index 553769e5a..42fd82788 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::rev_iter Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -133,7 +147,7 @@ Public Member Functions -inline +inline
    @@ -159,7 +173,7 @@ Public Member Functions -inline +inline
    @@ -184,7 +198,7 @@ Public Member Functions -inline +inline
    @@ -209,7 +223,7 @@ Public Member Functions -inline +inline
    @@ -234,7 +248,7 @@ Public Member Functions -inline +inline
    @@ -245,10 +259,13 @@ Public Member Functions
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.js b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.js new file mode 100644 index 000000000..47da81251 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1rev__iter.js @@ -0,0 +1,8 @@ +var classpocketfft_1_1detail_1_1rev__iter = +[ + [ "rev_iter", "classpocketfft_1_1detail_1_1rev__iter.html#af7b8c2f1534d3038ba2a3c6b9919e134", null ], + [ "advance", "classpocketfft_1_1detail_1_1rev__iter.html#ad1918c84ae963188afc7599629b29686", null ], + [ "ofs", "classpocketfft_1_1detail_1_1rev__iter.html#a78c3b4ad19edf9d20cab40ad109e9dd1", null ], + [ "remaining", "classpocketfft_1_1detail_1_1rev__iter.html#a143637135c441a4b9a2959c2370d8c63", null ], + [ "rev_ofs", "classpocketfft_1_1detail_1_1rev__iter.html#a7f112afa76cb7a4c29cff217a6f5f5a9", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rfftp-members.html b/docs/build/html/classpocketfft_1_1detail_1_1rfftp-members.html index 094c3d328..4afea5982 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1rfftp-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1rfftp-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::rfftp< T0 > Member List
    @@ -97,10 +111,12 @@ $(function(){ initResizable(false); }); exec(T c[], T0 fct, bool r2hc) constpocketfft::detail::rfftp< T0 >inline rfftp(size_t length_)pocketfft::detail::rfftp< T0 >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rfftp.html b/docs/build/html/classpocketfft_1_1detail_1_1rfftp.html index fdcf5dc58..6656f56e2 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1rfftp.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1rfftp.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::rfftp< T0 > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -99,7 +113,7 @@ $(function(){ initResizable(false); }); - + @@ -112,7 +126,7 @@ Public Member Functions
    -template<typename T0 >
    +template<typename T0>

    Public Member Functions

    template<typename T >
    template<typename T>
    void exec (T c[], T0 fct, bool r2hc) const
     
     rfftp (size_t length_)
    @@ -126,7 +140,7 @@ template<typename T0 >
    -inline +inline
    @@ -140,9 +154,9 @@ template<typename T0 >
    -template<typename T0 >
    +template<typename T0>
    -template<typename T >
    +template<typename T>
    @@ -165,7 +179,7 @@ template<typename T >
    -inline +inline
    @@ -176,10 +190,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1rfftp.js b/docs/build/html/classpocketfft_1_1detail_1_1rfftp.js new file mode 100644 index 000000000..00ab106fc --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1rfftp.js @@ -0,0 +1,5 @@ +var classpocketfft_1_1detail_1_1rfftp = +[ + [ "rfftp", "classpocketfft_1_1detail_1_1rfftp.html#a0c590f917b8e8afa3ff53ccff52e68c5", null ], + [ "exec", "classpocketfft_1_1detail_1_1rfftp.html#a073972f42bdd3617693be7be2cb5e0ac", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1simple__iter-members.html b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter-members.html index 3540dcef8..d0e3da97b 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1simple__iter-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::simple_iter Member List
    @@ -99,10 +113,12 @@ $(function(){ initResizable(false); }); remaining() constpocketfft::detail::simple_iterinline simple_iter(const arr_info &arr_)pocketfft::detail::simple_iterinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.html b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.html index b4997e6a3..e39aee3e2 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::simple_iter Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions -inline +inline
    @@ -153,7 +167,7 @@ Public Member Functions -inline +inline
    @@ -178,7 +192,7 @@ Public Member Functions -inline +inline
    @@ -203,7 +217,7 @@ Public Member Functions -inline +inline
    @@ -214,10 +228,13 @@ Public Member Functions
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.js b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.js new file mode 100644 index 000000000..aa62d77bb --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1simple__iter.js @@ -0,0 +1,7 @@ +var classpocketfft_1_1detail_1_1simple__iter = +[ + [ "simple_iter", "classpocketfft_1_1detail_1_1simple__iter.html#a1e455c615825bebd5f1f62665027b398", null ], + [ "advance", "classpocketfft_1_1detail_1_1simple__iter.html#a73a9ecd3008d2bd35aaa00bf9fac074f", null ], + [ "ofs", "classpocketfft_1_1detail_1_1simple__iter.html#ab59481ad9c8f04addb907c3ebb89f8fa", null ], + [ "remaining", "classpocketfft_1_1detail_1_1simple__iter.html#a9267d37f51a9a5aecc69293c7ed1b1f6", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn-members.html b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn-members.html index 6f787bbbd..9215b6c56 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::sincos_2pibyn< T > Member List
    @@ -97,10 +111,12 @@ $(function(){ initResizable(false); }); operator[](size_t idx) constpocketfft::detail::sincos_2pibyn< T >inline sincos_2pibyn(size_t n)pocketfft::detail::sincos_2pibyn< T >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.html b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.html index 66fd41799..403ebc0f7 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::sincos_2pibyn< T > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -111,7 +125,7 @@ Public Member Functions
    -template<typename T >
    +template<typename T>
    @@ -125,7 +139,7 @@ template<typename T >
    -inline +inline
    @@ -139,7 +153,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -153,7 +167,7 @@ template<typename T >
    -inline +inline
    @@ -164,10 +178,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.js b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.js new file mode 100644 index 000000000..c4eeb57d8 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1sincos__2pibyn.js @@ -0,0 +1,5 @@ +var classpocketfft_1_1detail_1_1sincos__2pibyn = +[ + [ "sincos_2pibyn", "classpocketfft_1_1detail_1_1sincos__2pibyn.html#a88518f2182d854c557edacd4ab8cbc40", null ], + [ "operator[]", "classpocketfft_1_1detail_1_1sincos__2pibyn.html#a71b02f67c47b24adb296eafd2c7a3598", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue-members.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue-members.html index 376c86759..e731ff151 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::threading::concurrent_queue< T > Member List
    @@ -98,10 +112,12 @@ $(function(){ initResizable(false); }); push(T val)pocketfft::detail::threading::concurrent_queue< T >inline try_pop(T &val)pocketfft::detail::threading::concurrent_queue< T >inline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html index f265aa42c..8d9ed36a2 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::threading::concurrent_queue< T > Class Template Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -113,7 +127,7 @@ Public Member Functions
    -template<typename T >
    +template<typename T>
    @@ -127,7 +141,7 @@ template<typename T >
    -inline +inline
    @@ -140,7 +154,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -154,7 +168,7 @@ template<typename T >
    -inline +inline
    @@ -167,7 +181,7 @@ template<typename T >
    -template<typename T >
    +template<typename T>
    @@ -181,7 +195,7 @@ template<typename T >
    -inline +inline
    @@ -192,10 +206,13 @@ template<typename T >
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.js b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.js new file mode 100644 index 000000000..49971dd6b --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.js @@ -0,0 +1,6 @@ +var classpocketfft_1_1detail_1_1threading_1_1concurrent__queue = +[ + [ "empty", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html#a1269e5da40c3f5145c895cee3641879a", null ], + [ "push", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html#ae8ebd6bc1b4d18e75bd046005e7dde7b", null ], + [ "try_pop", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html#aa3807d46a126d229f9054c779105ea43", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch-members.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch-members.html index e1f3ac810..32a37c31f 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::threading::latch Member List
    @@ -99,10 +113,12 @@ $(function(){ initResizable(false); }); latch(size_t n)pocketfft::detail::threading::latchinline wait()pocketfft::detail::threading::latchinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.html index 295d9a7ee..2b84c2f3c 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::threading::latch Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -127,7 +141,7 @@ Public Member Functions -inline +inline
    @@ -153,7 +167,7 @@ Public Member Functions -inline +inline
    @@ -178,7 +192,7 @@ Public Member Functions -inline +inline
    @@ -203,7 +217,7 @@ Public Member Functions -inline +inline
    @@ -214,10 +228,13 @@ Public Member Functions
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.js b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.js new file mode 100644 index 000000000..691be2987 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1latch.js @@ -0,0 +1,7 @@ +var classpocketfft_1_1detail_1_1threading_1_1latch = +[ + [ "latch", "classpocketfft_1_1detail_1_1threading_1_1latch.html#a9260c871bb927525f7f53caa23a19c15", null ], + [ "count_down", "classpocketfft_1_1detail_1_1threading_1_1latch.html#a81d6597189b40410e35f3cd653fd1342", null ], + [ "is_ready", "classpocketfft_1_1detail_1_1threading_1_1latch.html#ab41ecc5adb6187aa2682ca190fd920f3", null ], + [ "wait", "classpocketfft_1_1detail_1_1threading_1_1latch.html#af503189cc9247047fbdfc3ebf1daacc1", null ] +]; \ No newline at end of file diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool-members.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool-members.html index 0f23ed5de..bd6b41808 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool-members.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool-members.html @@ -3,7 +3,7 @@ - + MLX: Member List @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    pocketfft::detail::threading::thread_pool Member List
    @@ -101,10 +115,12 @@ $(function(){ initResizable(false); }); thread_pool()pocketfft::detail::threading::thread_poolinline ~thread_pool()pocketfft::detail::threading::thread_poolinline
    - - + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.html b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.html index 26c7b87f1..2a1eda8ea 100644 --- a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.html +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.html @@ -3,7 +3,7 @@ - + MLX: pocketfft::detail::threading::thread_pool Class Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Public Member Functions | @@ -131,7 +145,7 @@ Public Member Functions -inlineexplicit +inlineexplicit
    @@ -156,7 +170,7 @@ Public Member Functions -inline +inline
    @@ -181,7 +195,7 @@ Public Member Functions -inline +inline
    @@ -207,7 +221,7 @@ Public Member Functions -inline +inline
    @@ -232,7 +246,7 @@ Public Member Functions -inline +inline
    @@ -257,7 +271,7 @@ Public Member Functions -inline +inline
    @@ -268,10 +282,13 @@ Public Member Functions
  • mlx/3rdparty/pocketfft.h
  • - -
    + + diff --git a/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.js b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.js new file mode 100644 index 000000000..50512a963 --- /dev/null +++ b/docs/build/html/classpocketfft_1_1detail_1_1threading_1_1thread__pool.js @@ -0,0 +1,9 @@ +var classpocketfft_1_1detail_1_1threading_1_1thread__pool = +[ + [ "thread_pool", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#a37a8121a99dd06a9d44b3e80ba0ea560", null ], + [ "thread_pool", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#aefaadaa60c0183b862ad96338177a5e0", null ], + [ "~thread_pool", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#a68f71e79fa93379fcc5819e533b45472", null ], + [ "restart", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#a51d252df8d0cd060f15be8ba2bfe3288", null ], + [ "shutdown", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#a0c7c29290fde806031c497f24c4ad411", null ], + [ "submit", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html#a8698d49e8f406cdb88006aac6a91f9a4", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2arange_8h.html b/docs/build/html/common_2arange_8h.html index 338cb0a4c..7da1bb15c 100644 --- a/docs/build/html/common_2arange_8h.html +++ b/docs/build/html/common_2arange_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/arange.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    Namespaces | @@ -112,10 +126,13 @@ Functions  
    - -
    + + diff --git a/docs/build/html/common_2arange_8h.js b/docs/build/html/common_2arange_8h.js new file mode 100644 index 000000000..a0d6612ed --- /dev/null +++ b/docs/build/html/common_2arange_8h.js @@ -0,0 +1,4 @@ +var common_2arange_8h = +[ + [ "mlx::core::arange", "namespacemlx_1_1core.html#a369aa886219b83cf219e7a7862ce260b", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2arange_8h_source.html b/docs/build/html/common_2arange_8h_source.html index 4e4bc9347..586098c23 100644 --- a/docs/build/html/common_2arange_8h_source.html +++ b/docs/build/html/common_2arange_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/arange.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    arange.h
    @@ -103,9 +117,9 @@ $(function(){ initResizable(false); });
    10namespace {
    11
    12template <typename T>
    -
    13void arange(T start, T next, array& out, size_t size) {
    +
    13void arange(T start, T next, array& out, size_t size) {
    14 auto ptr = out.data<T>();
    -
    15 auto step_size = next - start;
    +
    15 auto step_size = next - start;
    16 for (int i = 0; i < size; ++i) {
    17 ptr[i] = start;
    18 start += step_size;
    @@ -169,11 +183,10 @@ $(function(){ initResizable(false); });
    74} // namespace mlx::core
    -
    BufferHolder * next
    Definition allocator.h:38
    -
    Definition array.h:23
    -
    size_t nbytes() const
    The number of bytes in the array.
    Definition array.h:92
    -
    size_t size() const
    The number of elements in the array.
    Definition array.h:87
    -
    Dtype dtype() const
    Get the arrays data type.
    Definition array.h:130
    +
    Definition array.h:24
    +
    size_t nbytes() const
    The number of bytes in the array.
    Definition array.h:93
    +
    size_t size() const
    The number of elements in the array.
    Definition array.h:88
    +
    Dtype dtype() const
    Get the arrays data type.
    Definition array.h:131
    void set_data(allocator::Buffer buffer, Deleter d=allocator::free)
    Buffer malloc_or_wait(size_t size)
    Definition allocator.h:7
    @@ -192,10 +205,13 @@ $(function(){ initResizable(false); });
    constexpr Dtype uint32
    Definition dtype.h:71
    constexpr Dtype complex64
    Definition dtype.h:82
    - - + + diff --git a/docs/build/html/common_2binary_8h.html b/docs/build/html/common_2binary_8h.html index d75e0b69d..ad12dba9e 100644 --- a/docs/build/html/common_2binary_8h.html +++ b/docs/build/html/common_2binary_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/binary.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -107,26 +121,14 @@ Namespaces namespace  mlx::core   -

    Variable Documentation

    - -

    ◆ op

    - -
    -
    - - - - -
    Op op
    -
    - -
    -
    - -
    + + diff --git a/docs/build/html/common_2binary_8h_source.html b/docs/build/html/common_2binary_8h_source.html index 8fd1b2c8b..8d1fa3323 100644 --- a/docs/build/html/common_2binary_8h_source.html +++ b/docs/build/html/common_2binary_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/binary.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    binary.h
    @@ -109,10 +123,10 @@ $(function(){ initResizable(false); });
    16 ScalarVector,
    17 VectorScalar,
    18 VectorVector,
    -
    19 General,
    +
    19 General,
    20};
    21
    -
    22BinaryOpType get_binary_op_type(const array& a, const array& b) {
    +
    22BinaryOpType get_binary_op_type(const array& a, const array& b) {
    23 BinaryOpType bopt;
    24 if (a.data_size() == 1 && b.data_size() == 1) {
    25 bopt = BinaryOpType::ScalarScalar;
    @@ -121,8 +135,8 @@ $(function(){ initResizable(false); });
    28 } else if (b.data_size() == 1 && a.flags().contiguous) {
    29 bopt = BinaryOpType::VectorScalar;
    30 } else if (
    -
    31 a.flags().row_contiguous && b.flags().row_contiguous ||
    -
    32 a.flags().col_contiguous && b.flags().col_contiguous) {
    +
    31 (a.flags().row_contiguous && b.flags().row_contiguous) ||
    +
    32 (a.flags().col_contiguous && b.flags().col_contiguous)) {
    33 bopt = BinaryOpType::VectorVector;
    34 } else {
    35 bopt = BinaryOpType::General;
    @@ -131,9 +145,9 @@ $(function(){ initResizable(false); });
    38}
    39
    40void set_binary_op_output_data(
    -
    41 const array& a,
    -
    42 const array& b,
    -
    43 array& out,
    +
    41 const array& a,
    +
    42 const array& b,
    +
    43 array& out,
    44 BinaryOpType bopt,
    45 bool donate_with_move = false) {
    46 bool b_donatable = is_donatable(b, out);
    @@ -219,15 +233,15 @@ $(function(){ initResizable(false); });
    126
    127template <typename T, typename U, typename Op>
    128struct DefaultVectorScalar {
    -
    129 Op op;
    +
    129 Op op;
    130
    -
    131 DefaultVectorScalar(Op op_) : op(op_) {}
    +
    131 DefaultVectorScalar(Op op_) : op(op_) {}
    132
    133 void operator()(const T* a, const T* b, U* dst, int size) {
    134 T scalar = *b;
    135 while (size-- > 0) {
    -
    136 *dst = op(*a, scalar);
    -
    137 dst++;
    +
    136 *dst = op(*a, scalar);
    +
    137 dst++;
    138 a++;
    139 }
    140 }
    @@ -235,15 +249,15 @@ $(function(){ initResizable(false); });
    142
    143template <typename T, typename U, typename Op>
    144struct DefaultScalarVector {
    -
    145 Op op;
    +
    145 Op op;
    146
    -
    147 DefaultScalarVector(Op op_) : op(op_) {}
    +
    147 DefaultScalarVector(Op op_) : op(op_) {}
    148
    149 void operator()(const T* a, const T* b, U* dst, int size) {
    150 T scalar = *a;
    151 while (size-- > 0) {
    -
    152 *dst = op(scalar, *b);
    -
    153 dst++;
    +
    152 *dst = op(scalar, *b);
    +
    153 dst++;
    154 b++;
    155 }
    156 }
    @@ -251,14 +265,14 @@ $(function(){ initResizable(false); });
    158
    159template <typename T, typename U, typename Op>
    160struct DefaultVectorVector {
    -
    161 Op op;
    +
    161 Op op;
    162
    -
    163 DefaultVectorVector(Op op_) : op(op_) {}
    +
    163 DefaultVectorVector(Op op_) : op(op_) {}
    164
    165 void operator()(const T* a, const T* b, U* dst, int size) {
    166 while (size-- > 0) {
    -
    167 *dst = op(*a, *b);
    -
    168 dst++;
    +
    167 *dst = op(*a, *b);
    +
    168 dst++;
    169 a++;
    170 b++;
    171 }
    @@ -270,11 +284,11 @@ $(function(){ initResizable(false); });
    177 const T* a,
    178 const T* b,
    179 U* out,
    -
    180 Op op,
    -
    181 const std::vector<int>& shape,
    -
    182 const std::vector<size_t>& a_strides,
    -
    183 const std::vector<size_t>& b_strides,
    -
    184 const std::vector<size_t>& out_strides,
    +
    180 Op op,
    +
    181 const Shape& shape,
    +
    182 const Strides& a_strides,
    +
    183 const Strides& b_strides,
    +
    184 const Strides& out_strides,
    185 int axis) {
    186 auto stride_a = a_strides[axis];
    187 auto stride_b = b_strides[axis];
    @@ -284,12 +298,12 @@ $(function(){ initResizable(false); });
    191 for (int i = 0; i < N; i++) {
    192 if constexpr (D > 1) {
    193 binary_op_dims<T, U, Op, D - 1, Strided>(
    -
    194 a, b, out, op, shape, a_strides, b_strides, out_strides, axis + 1);
    +
    194 a, b, out, op, shape, a_strides, b_strides, out_strides, axis + 1);
    195 } else {
    196 if constexpr (Strided) {
    -
    197 op(a, b, out, stride_out);
    +
    197 op(a, b, out, stride_out);
    198 } else {
    -
    199 *out = op(*a, *b);
    +
    199 *out = op(*a, *b);
    200 }
    201 }
    202 out += stride_out;
    @@ -300,15 +314,15 @@ $(function(){ initResizable(false); });
    207
    208template <typename T, typename U, bool Strided, typename Op>
    209void binary_op_dispatch_dims(
    -
    210 const array& a,
    -
    211 const array& b,
    -
    212 array& out,
    -
    213 Op op,
    +
    210 const array& a,
    +
    211 const array& b,
    +
    212 array& out,
    +
    213 Op op,
    214 int dim,
    -
    215 const std::vector<int>& shape,
    -
    216 const std::vector<size_t>& a_strides,
    -
    217 const std::vector<size_t>& b_strides,
    -
    218 const std::vector<size_t>& out_strides) {
    +
    215 const Shape& shape,
    +
    216 const Strides& a_strides,
    +
    217 const Strides& b_strides,
    +
    218 const Strides& out_strides) {
    219 const T* a_ptr = a.data<T>();
    220 const T* b_ptr = b.data<T>();
    221 U* out_ptr = out.data<U>();
    @@ -318,7 +332,7 @@ $(function(){ initResizable(false); });
    225 a_ptr,
    226 b_ptr,
    227 out_ptr,
    -
    228 op,
    +
    228 op,
    229 shape,
    230 a_strides,
    231 b_strides,
    @@ -330,7 +344,7 @@ $(function(){ initResizable(false); });
    237 a_ptr,
    238 b_ptr,
    239 out_ptr,
    -
    240 op,
    +
    240 op,
    241 shape,
    242 a_strides,
    243 b_strides,
    @@ -342,7 +356,7 @@ $(function(){ initResizable(false); });
    249 a_ptr,
    250 b_ptr,
    251 out_ptr,
    -
    252 op,
    +
    252 op,
    253 shape,
    254 a_strides,
    255 b_strides,
    @@ -351,15 +365,15 @@ $(function(){ initResizable(false); });
    258 return;
    259 }
    260
    -
    261 ContiguousIterator<size_t> a_it(shape, a_strides, dim - 3);
    -
    262 ContiguousIterator<size_t> b_it(shape, b_strides, dim - 3);
    -
    263 size_t stride = out_strides[dim - 4];
    -
    264 for (size_t elem = 0; elem < a.size(); elem += stride) {
    +
    261 ContiguousIterator a_it(shape, a_strides, dim - 3);
    +
    262 ContiguousIterator b_it(shape, b_strides, dim - 3);
    +
    263 auto stride = out_strides[dim - 4];
    +
    264 for (int64_t elem = 0; elem < a.size(); elem += stride) {
    265 binary_op_dims<T, U, Op, 3, Strided>(
    266 a_ptr + a_it.loc,
    267 b_ptr + b_it.loc,
    268 out_ptr + elem,
    -
    269 op,
    +
    269 op,
    270 shape,
    271 a_strides,
    272 b_strides,
    @@ -378,10 +392,10 @@ $(function(){ initResizable(false); });
    285 typename OpVS,
    286 typename OpVV>
    287void binary_op(
    -
    288 const array& a,
    -
    289 const array& b,
    -
    290 array& out,
    -
    291 Op op,
    +
    288 const array& a,
    +
    289 const array& b,
    +
    290 array& out,
    +
    291 Op op,
    292 OpSV opsv,
    293 OpVS opvs,
    294 OpVV opvv) {
    @@ -390,7 +404,7 @@ $(function(){ initResizable(false); });
    297
    298 // The full computation is scalar scalar so call the base op once
    299 if (bopt == BinaryOpType::ScalarScalar) {
    -
    300 *(out.data<U>()) = op(*a.data<T>(), *b.data<T>());
    +
    300 *(out.data<U>()) = op(*a.data<T>(), *b.data<T>());
    301 return;
    302 }
    303
    @@ -413,14 +427,14 @@ $(function(){ initResizable(false); });
    320 }
    321
    322 // General computation so let's try to optimize
    -
    323 auto [new_shape, new_strides] = collapse_contiguous_dims(
    +
    323 auto [new_shape, new_strides] = collapse_contiguous_dims(
    324 a.shape(), {a.strides(), b.strides(), out.strides()});
    325 const auto& a_strides = new_strides[0];
    326 const auto& b_strides = new_strides[1];
    327 const auto& strides = new_strides[2];
    328
    329 // Get the left-most dim such that the array is row contiguous after
    -
    330 auto leftmost_rc_dim = [&strides](const std::vector<size_t>& arr_strides) {
    +
    330 auto leftmost_rc_dim = [&strides](const auto& arr_strides) {
    331 int d = arr_strides.size() - 1;
    332 for (; d >= 0 && arr_strides[d] == strides[d]; d--) {
    333 }
    @@ -430,7 +444,7 @@ $(function(){ initResizable(false); });
    337 auto b_rc_dim = leftmost_rc_dim(b_strides);
    338
    339 // Get the left-most dim such that the array is a broadcasted "scalar" after
    -
    340 auto leftmost_s_dim = [](const std::vector<size_t>& arr_strides) {
    +
    340 auto leftmost_s_dim = [](const auto& arr_strides) {
    341 int d = arr_strides.size() - 1;
    342 for (; d >= 0 && arr_strides[d] == 0; d--) {
    343 }
    @@ -481,17 +495,17 @@ $(function(){ initResizable(false); });
    388 break;
    389 default:
    390 binary_op_dispatch_dims<T, U, false>(
    -
    391 a, b, out, op, dim, new_shape, a_strides, b_strides, strides);
    +
    391 a, b, out, op, dim, new_shape, a_strides, b_strides, strides);
    392 break;
    393 }
    394}
    395
    396template <typename T, typename Op, typename OpSV, typename OpVS, typename OpVV>
    397void binary_op(
    -
    398 const array& a,
    -
    399 const array& b,
    -
    400 array& out,
    -
    401 Op op,
    +
    398 const array& a,
    +
    399 const array& b,
    +
    400 array& out,
    +
    401 Op op,
    402 OpSV opsv,
    403 OpVS opvs,
    404 OpVV opvv) {
    @@ -506,19 +520,19 @@ $(function(){ initResizable(false); });
    413 a,
    414 b,
    415 out,
    -
    416 op,
    -
    417 DefaultScalarVector<T, T, Op>(op),
    -
    418 DefaultVectorScalar<T, T, Op>(op),
    -
    419 DefaultVectorVector<T, T, Op>(op));
    +
    416 op,
    +
    417 DefaultScalarVector<T, T, Op>(op),
    +
    418 DefaultVectorScalar<T, T, Op>(op),
    +
    419 DefaultVectorVector<T, T, Op>(op));
    420 } else {
    421 // opsv and opvs were UseDefaultBinaryOp
    422 binary_op<T, T>(
    423 a,
    424 b,
    425 out,
    -
    426 op,
    -
    427 DefaultScalarVector<T, T, Op>(op),
    -
    428 DefaultVectorScalar<T, T, Op>(op),
    +
    426 op,
    +
    427 DefaultScalarVector<T, T, Op>(op),
    +
    428 DefaultVectorScalar<T, T, Op>(op),
    429 opvv);
    430 }
    431 } else if constexpr (std::is_same<decltype(opvv), UseDefaultBinaryOp>::
    @@ -528,14 +542,14 @@ $(function(){ initResizable(false); });
    435 a,
    436 b,
    437 out,
    -
    438 op,
    -
    439 DefaultScalarVector<T, T, Op>(op),
    +
    438 op,
    +
    439 DefaultScalarVector<T, T, Op>(op),
    440 opvs,
    -
    441 DefaultVectorVector<T, T, Op>(op));
    +
    441 DefaultVectorVector<T, T, Op>(op));
    442 } else {
    443 // opsv was UseDefaultBinaryOp
    444 binary_op<T, T>(
    -
    445 a, b, out, op, DefaultScalarVector<T, T, Op>(op), opvs, opvv);
    +
    445 a, b, out, op, DefaultScalarVector<T, T, Op>(op), opvs, opvv);
    446 }
    447 } else if constexpr (std::is_same<decltype(opvs), UseDefaultBinaryOp>::
    448 value) {
    @@ -545,36 +559,36 @@ $(function(){ initResizable(false); });
    452 a,
    453 b,
    454 out,
    -
    455 op,
    +
    455 op,
    456 opsv,
    -
    457 DefaultVectorScalar<T, T, Op>(op),
    -
    458 DefaultVectorVector<T, T, Op>(op));
    +
    457 DefaultVectorScalar<T, T, Op>(op),
    +
    458 DefaultVectorVector<T, T, Op>(op));
    459 } else {
    460 // opvs was UseDefaultBinaryOp
    461 binary_op<T, T>(
    -
    462 a, b, out, op, opsv, DefaultVectorScalar<T, T, Op>(op), opvv);
    +
    462 a, b, out, op, opsv, DefaultVectorScalar<T, T, Op>(op), opvv);
    463 }
    464 } else if constexpr (std::is_same<decltype(opvv), UseDefaultBinaryOp>::
    465 value) {
    466 // opvv was UseDefaultBinaryOp
    467 binary_op<T, T>(
    -
    468 a, b, out, op, opsv, opvs, DefaultVectorVector<T, T, Op>(op));
    +
    468 a, b, out, op, opsv, opvs, DefaultVectorVector<T, T, Op>(op));
    469 } else {
    470 // All ops provided
    -
    471 binary_op<T, T>(a, b, out, op, opsv, opvs, opvv);
    +
    471 binary_op<T, T>(a, b, out, op, opsv, opvs, opvv);
    472 }
    473}
    474
    475template <typename T, typename Op>
    -
    476void binary_op(const array& a, const array& b, array& out, Op op) {
    -
    477 DefaultScalarVector<T, T, Op> opsv(op);
    -
    478 DefaultVectorScalar<T, T, Op> opvs(op);
    -
    479 DefaultVectorVector<T, T, Op> opvv(op);
    -
    480 binary_op<T, T>(a, b, out, op, opsv, opvs, opvv);
    +
    476void binary_op(const array& a, const array& b, array& out, Op op) {
    +
    477 DefaultScalarVector<T, T, Op> opsv(op);
    +
    478 DefaultVectorScalar<T, T, Op> opvs(op);
    +
    479 DefaultVectorVector<T, T, Op> opvv(op);
    +
    480 binary_op<T, T>(a, b, out, op, opsv, opvs, opvv);
    481}
    482
    483template <typename... Ops>
    -
    484void binary(const array& a, const array& b, array& out, Ops... ops) {
    +
    484void binary(const array& a, const array& b, array& out, Ops... ops) {
    485 switch (out.dtype()) {
    486 case bool_:
    487 binary_op<bool>(a, b, out, ops...);
    @@ -624,31 +638,37 @@ $(function(){ initResizable(false); }); -
    Op op
    Definition binary.h:129
    +
    Definition array.h:24
    Buffer malloc_or_wait(size_t size)
    const char * binary()
    Definition allocator.h:7
    constexpr Dtype bool_
    Definition dtype.h:67
    constexpr Dtype uint64
    Definition dtype.h:72
    constexpr Dtype uint16
    Definition dtype.h:70
    -
    std::tuple< std::vector< int >, std::vector< std::vector< int64_t > > > collapse_contiguous_dims(const std::vector< int > &shape, const std::vector< std::vector< int64_t > > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    +
    std::tuple< Shape, std::vector< Strides > > collapse_contiguous_dims(const Shape &shape, const std::vector< Strides > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    constexpr Dtype bfloat16
    Definition dtype.h:81
    constexpr Dtype int32
    Definition dtype.h:76
    constexpr Dtype float32
    Definition dtype.h:80
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    constexpr Dtype int16
    Definition dtype.h:75
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    constexpr Dtype int8
    Definition dtype.h:74
    constexpr Dtype int64
    Definition dtype.h:77
    constexpr Dtype uint8
    Definition dtype.h:69
    -
    constexpr Dtype float16
    Definition dtype.h:79
    constexpr Dtype uint32
    Definition dtype.h:71
    -
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:174
    +
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:155
    constexpr Dtype complex64
    Definition dtype.h:82
    +
    void dst(const shape_t &shape, const stride_t &stride_in, const stride_t &stride_out, const shape_t &axes, int type, const T *data_in, T *data_out, T fct, bool ortho, size_t nthreads=1)
    Definition pocketfft.h:3416
    +
    Definition utils.h:73
    - - + + diff --git a/docs/build/html/common_2binary__two_8h.html b/docs/build/html/common_2binary__two_8h.html index 42507a021..cf4c65523 100644 --- a/docs/build/html/common_2binary__two_8h.html +++ b/docs/build/html/common_2binary__two_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/binary_two.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -106,10 +120,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/common_2binary__two_8h_source.html b/docs/build/html/common_2binary__two_8h_source.html index fed59cf69..e8bd059ef 100644 --- a/docs/build/html/common_2binary__two_8h_source.html +++ b/docs/build/html/common_2binary__two_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/binary_two.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    binary_two.h
    @@ -108,11 +122,11 @@ $(function(){ initResizable(false); });
    15 const T* b,
    16 U* out_a,
    17 U* out_b,
    -
    18 Op op,
    -
    19 const std::vector<int>& shape,
    -
    20 const std::vector<size_t>& a_strides,
    -
    21 const std::vector<size_t>& b_strides,
    -
    22 const std::vector<size_t>& out_strides,
    +
    18 Op op,
    +
    19 const Shape& shape,
    +
    20 const Strides& a_strides,
    +
    21 const Strides& b_strides,
    +
    22 const Strides& out_strides,
    23 int axis) {
    24 auto stride_a = a_strides[axis];
    25 auto stride_b = b_strides[axis];
    @@ -126,14 +140,14 @@ $(function(){ initResizable(false); });
    33 b,
    34 out_a,
    35 out_b,
    -
    36 op,
    +
    36 op,
    37 shape,
    38 a_strides,
    39 b_strides,
    40 out_strides,
    41 axis + 1);
    42 } else {
    -
    43 std::tie(*out_a, *out_b) = op(*a, *b);
    +
    43 std::tie(*out_a, *out_b) = op(*a, *b);
    44 }
    45 a += stride_a;
    46 b += stride_b;
    @@ -144,12 +158,12 @@ $(function(){ initResizable(false); });
    51
    52template <typename T, typename U, typename Op>
    53void binary_op_dispatch_dims(
    -
    54 const array& a,
    -
    55 const array& b,
    -
    56 array& out_a,
    -
    57 array& out_b,
    -
    58 Op op) {
    -
    59 auto [shape, strides] = collapse_contiguous_dims(
    +
    54 const array& a,
    +
    55 const array& b,
    +
    56 array& out_a,
    +
    57 array& out_b,
    +
    58 Op op) {
    +
    59 auto [shape, strides] = collapse_contiguous_dims(
    60 a.shape(), {a.strides(), b.strides(), out_a.strides()});
    61 const auto& a_strides = strides[0];
    62 const auto& b_strides = strides[1];
    @@ -167,7 +181,7 @@ $(function(){ initResizable(false); });
    74 b_ptr,
    75 out_a_ptr,
    76 out_b_ptr,
    -
    77 op,
    +
    77 op,
    78 shape,
    79 a_strides,
    80 b_strides,
    @@ -180,7 +194,7 @@ $(function(){ initResizable(false); });
    87 b_ptr,
    88 out_a_ptr,
    89 out_b_ptr,
    -
    90 op,
    +
    90 op,
    91 shape,
    92 a_strides,
    93 b_strides,
    @@ -189,16 +203,16 @@ $(function(){ initResizable(false); });
    96 return;
    97 }
    98
    -
    99 ContiguousIterator<size_t> a_it(shape, a_strides, ndim - 2);
    -
    100 ContiguousIterator<size_t> b_it(shape, b_strides, ndim - 2);
    -
    101 size_t stride = out_strides[ndim - 3];
    +
    99 ContiguousIterator a_it(shape, a_strides, ndim - 2);
    +
    100 ContiguousIterator b_it(shape, b_strides, ndim - 2);
    +
    101 auto stride = out_strides[ndim - 3];
    102 for (size_t elem = 0; elem < a.size(); elem += stride) {
    103 binary_op_dims<T, U, Op, 2>(
    104 a_ptr + a_it.loc,
    105 b_ptr + b_it.loc,
    106 out_a_ptr + elem,
    107 out_b_ptr + elem,
    -
    108 op,
    +
    108 op,
    109 shape,
    110 a_strides,
    111 b_strides,
    @@ -211,10 +225,10 @@ $(function(){ initResizable(false); });
    118
    119template <typename T, typename U = T, typename Op>
    120void binary_op(
    -
    121 const array& a,
    -
    122 const array& b,
    +
    121 const array& a,
    +
    122 const array& b,
    123 std::vector<array>& outputs,
    -
    124 Op op) {
    +
    124 Op op) {
    125 auto bopt = get_binary_op_type(a, b);
    126 auto& out_a = outputs[0];
    127 auto& out_b = outputs[1];
    @@ -223,7 +237,7 @@ $(function(){ initResizable(false); });
    130
    131 // The full computation is scalar scalar so call the base op once
    132 if (bopt == BinaryOpType::General) {
    -
    133 binary_op_dispatch_dims<T, U, Op>(a, b, out_a, out_b, op);
    +
    133 binary_op_dispatch_dims<T, U, Op>(a, b, out_a, out_b, op);
    134 return;
    135 }
    136
    @@ -232,24 +246,24 @@ $(function(){ initResizable(false); });
    139 auto out_a_ptr = out_a.data<U>();
    140 auto out_b_ptr = out_b.data<U>();
    141 if (bopt == BinaryOpType::ScalarScalar) {
    -
    142 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    +
    142 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    143 } else if (bopt == BinaryOpType::ScalarVector) {
    144 for (size_t i = 0; i < b.size(); ++i) {
    -
    145 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    +
    145 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    146 out_a_ptr++;
    147 out_b_ptr++;
    148 b_ptr++;
    149 }
    150 } else if (bopt == BinaryOpType::VectorScalar) {
    151 for (size_t i = 0; i < a.size(); ++i) {
    -
    152 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    +
    152 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    153 out_a_ptr++;
    154 out_b_ptr++;
    155 a_ptr++;
    156 }
    157 } else { // VectorVector
    158 for (size_t i = 0; i < a.size(); ++i) {
    -
    159 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    +
    159 std::tie(*out_a_ptr, *out_b_ptr) = op(*a_ptr, *b_ptr);
    160 out_a_ptr++;
    161 out_b_ptr++;
    162 a_ptr++;
    @@ -260,49 +274,49 @@ $(function(){ initResizable(false); });
    167
    168template <typename Op>
    169void binary(
    -
    170 const array& a,
    -
    171 const array& b,
    +
    170 const array& a,
    +
    171 const array& b,
    172 std::vector<array>& outputs,
    -
    173 Op op) {
    +
    173 Op op) {
    174 switch (outputs[0].dtype()) {
    175 case bool_:
    -
    176 binary_op<bool>(a, b, outputs, op);
    +
    176 binary_op<bool>(a, b, outputs, op);
    177 break;
    178 case uint8:
    -
    179 binary_op<uint8_t>(a, b, outputs, op);
    +
    179 binary_op<uint8_t>(a, b, outputs, op);
    180 break;
    181 case uint16:
    -
    182 binary_op<uint16_t>(a, b, outputs, op);
    +
    182 binary_op<uint16_t>(a, b, outputs, op);
    183 break;
    184 case uint32:
    -
    185 binary_op<uint32_t>(a, b, outputs, op);
    +
    185 binary_op<uint32_t>(a, b, outputs, op);
    186 break;
    187 case uint64:
    -
    188 binary_op<uint64_t>(a, b, outputs, op);
    +
    188 binary_op<uint64_t>(a, b, outputs, op);
    189 break;
    190 case int8:
    -
    191 binary_op<int8_t>(a, b, outputs, op);
    +
    191 binary_op<int8_t>(a, b, outputs, op);
    192 break;
    193 case int16:
    -
    194 binary_op<int16_t>(a, b, outputs, op);
    +
    194 binary_op<int16_t>(a, b, outputs, op);
    195 break;
    196 case int32:
    -
    197 binary_op<int32_t>(a, b, outputs, op);
    +
    197 binary_op<int32_t>(a, b, outputs, op);
    198 break;
    199 case int64:
    -
    200 binary_op<int64_t>(a, b, outputs, op);
    +
    200 binary_op<int64_t>(a, b, outputs, op);
    201 break;
    202 case float16:
    -
    203 binary_op<float16_t>(a, b, outputs, op);
    +
    203 binary_op<float16_t>(a, b, outputs, op);
    204 break;
    205 case float32:
    -
    206 binary_op<float>(a, b, outputs, op);
    +
    206 binary_op<float>(a, b, outputs, op);
    207 break;
    208 case bfloat16:
    -
    209 binary_op<bfloat16_t>(a, b, outputs, op);
    +
    209 binary_op<bfloat16_t>(a, b, outputs, op);
    210 break;
    211 case complex64:
    -
    212 binary_op<complex64_t>(a, b, outputs, op);
    +
    212 binary_op<complex64_t>(a, b, outputs, op);
    213 break;
    214 }
    215}
    @@ -311,29 +325,35 @@ $(function(){ initResizable(false); });
    218
    219} // namespace mlx::core
    +
    Definition array.h:24
    -
    Op op
    Definition binary.h:129
    const char * binary()
    Definition allocator.h:7
    constexpr Dtype bool_
    Definition dtype.h:67
    constexpr Dtype uint64
    Definition dtype.h:72
    constexpr Dtype uint16
    Definition dtype.h:70
    -
    std::tuple< std::vector< int >, std::vector< std::vector< int64_t > > > collapse_contiguous_dims(const std::vector< int > &shape, const std::vector< std::vector< int64_t > > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    +
    std::tuple< Shape, std::vector< Strides > > collapse_contiguous_dims(const Shape &shape, const std::vector< Strides > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    constexpr Dtype bfloat16
    Definition dtype.h:81
    constexpr Dtype int32
    Definition dtype.h:76
    constexpr Dtype float32
    Definition dtype.h:80
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    constexpr Dtype int16
    Definition dtype.h:75
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    constexpr Dtype int8
    Definition dtype.h:74
    constexpr Dtype int64
    Definition dtype.h:77
    constexpr Dtype uint8
    Definition dtype.h:69
    constexpr Dtype float16
    Definition dtype.h:79
    constexpr Dtype uint32
    Definition dtype.h:71
    constexpr Dtype complex64
    Definition dtype.h:82
    +
    Definition utils.h:73
    - - + + diff --git a/docs/build/html/common_2copy_8h.html b/docs/build/html/common_2copy_8h.html index bb95539c1..1b4b52af3 100644 --- a/docs/build/html/common_2copy_8h.html +++ b/docs/build/html/common_2copy_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/copy.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Namespaces | @@ -122,15 +136,17 @@ Functions   void mlx::core::copy_inplace (const array &src, array &dst, CopyType ctype)   -template<typename stride_t > -void mlx::core::copy_inplace (const array &src, array &dst, const std::vector< int > &data_shape, const std::vector< stride_t > &i_strides, const std::vector< stride_t > &o_strides, int64_t i_offset, int64_t o_offset, CopyType ctype) -  +void mlx::core::copy_inplace (const array &src, array &dst, const Shape &data_shape, const Strides &i_strides, const Strides &o_strides, int64_t i_offset, int64_t o_offset, CopyType ctype) + 
    - -
    + + diff --git a/docs/build/html/common_2copy_8h.js b/docs/build/html/common_2copy_8h.js new file mode 100644 index 000000000..5ea6e8170 --- /dev/null +++ b/docs/build/html/common_2copy_8h.js @@ -0,0 +1,12 @@ +var common_2copy_8h = +[ + [ "mlx::core::CopyType", "namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337", [ + [ "mlx::core::CopyType::Scalar", "namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337af60357a8d17e45793298323f1b372a74", null ], + [ "mlx::core::CopyType::Vector", "namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337a57dea6f5039281b7fee517fc43bf3110", null ], + [ "mlx::core::CopyType::General", "namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337a0db377921f4ce762c62526131097968f", null ], + [ "mlx::core::CopyType::GeneralGeneral", "namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337a6fe62e8ce1fae1e70cb9eeaa67d29dab", null ] + ] ], + [ "mlx::core::copy", "namespacemlx_1_1core.html#a479648542a2bea151b947b18f0e79dd2", null ], + [ "mlx::core::copy_inplace", "namespacemlx_1_1core.html#ae85bafda5ab0b4b2289591260cf07685", null ], + [ "mlx::core::copy_inplace", "namespacemlx_1_1core.html#a98495894a796b2cc6d022e7a03432c64", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2copy_8h_source.html b/docs/build/html/common_2copy_8h_source.html index f0c0bd54b..836a23927 100644 --- a/docs/build/html/common_2copy_8h_source.html +++ b/docs/build/html/common_2copy_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/copy.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    copy.h
    @@ -103,52 +117,56 @@ $(function(){ initResizable(false); });
    10enum class CopyType {
    11 // Copy a raw scalar input into the full contiguous output
    -
    12 Scalar,
    +
    13
    14 // Copy the raw input buffer contiguously into a raw output buffer of the same
    15 // size
    -
    16 Vector,
    +
    17
    18 // Copy the full virtual input to the full contiguous output
    -
    19 General,
    +
    20
    21 // Copy the full virtual input to the full virtual output. We assume the
    22 // input and output have the same shape.
    - +
    24};
    25
    26void copy(const array& src, array& dst, CopyType ctype);
    27void copy_inplace(const array& src, array& dst, CopyType ctype);
    28
    -
    29template <typename stride_t>
    - -
    31 const array& src,
    -
    32 array& dst,
    -
    33 const std::vector<int>& data_shape,
    -
    34 const std::vector<stride_t>& i_strides,
    -
    35 const std::vector<stride_t>& o_strides,
    -
    36 int64_t i_offset,
    -
    37 int64_t o_offset,
    -
    38 CopyType ctype);
    -
    39
    -
    40} // namespace mlx::core
    + +
    30 const array& src,
    +
    31 array& dst,
    +
    32 const Shape& data_shape,
    +
    33 const Strides& i_strides,
    +
    34 const Strides& o_strides,
    +
    35 int64_t i_offset,
    +
    36 int64_t o_offset,
    +
    37 CopyType ctype);
    +
    38
    +
    39} // namespace mlx::core
    -
    Definition array.h:23
    +
    Definition array.h:24
    Definition allocator.h:7
    void copy(const array &src, array &dst, CopyType ctype)
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    void copy_inplace(const array &src, array &dst, CopyType ctype)
    CopyType
    Definition copy.h:10
    - - - - +
    @ General
    Definition copy.h:19
    +
    @ Vector
    Definition copy.h:16
    +
    @ GeneralGeneral
    Definition copy.h:23
    +
    @ Scalar
    Definition copy.h:12
    - - + + diff --git a/docs/build/html/common_2hadamard_8h.html b/docs/build/html/common_2hadamard_8h.html index c518db3ad..8b7445609 100644 --- a/docs/build/html/common_2hadamard_8h.html +++ b/docs/build/html/common_2hadamard_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/hadamard.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Namespaces | @@ -124,10 +138,13 @@ Variables  
    - -
    + + diff --git a/docs/build/html/common_2hadamard_8h.js b/docs/build/html/common_2hadamard_8h.js new file mode 100644 index 000000000..9c19183aa --- /dev/null +++ b/docs/build/html/common_2hadamard_8h.js @@ -0,0 +1,8 @@ +var common_2hadamard_8h = +[ + [ "mlx::core::decompose_hadamard", "namespacemlx_1_1core.html#a3a8fe7ba84714dbb5fdc81e93a07abc8", null ], + [ "mlx::core::hadamard_matrices", "namespacemlx_1_1core.html#a50214cf406957fab27c8bef32046f030", null ], + [ "mlx::core::h12", "namespacemlx_1_1core.html#a4beeeec4413be7adcfb14feaa9cf0e2e", null ], + [ "mlx::core::h20", "namespacemlx_1_1core.html#a862c6b94fec384c34a699ced64d01404", null ], + [ "mlx::core::h28", "namespacemlx_1_1core.html#ac447ad59592dd06435adca7df37e33ad", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2hadamard_8h_source.html b/docs/build/html/common_2hadamard_8h_source.html index cae220300..93892e51d 100644 --- a/docs/build/html/common_2hadamard_8h_source.html +++ b/docs/build/html/common_2hadamard_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/hadamard.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    hadamard.h
    @@ -206,13 +220,16 @@ $(function(){ initResizable(false); });
    const std::map< int, std::string_view > hadamard_matrices()
    Definition hadamard.h:81
    constexpr std::string_view h20
    Definition hadamard.h:27
    constexpr std::string_view h28
    Definition hadamard.h:50
    -
    bool is_power_of_2(int n)
    Definition utils.h:110
    +
    bool is_power_of_2(int n)
    Definition utils.h:104
    - - + + diff --git a/docs/build/html/common_2reduce_8h.html b/docs/build/html/common_2reduce_8h.html index a50a6972f..eaa491756 100644 --- a/docs/build/html/common_2reduce_8h.html +++ b/docs/build/html/common_2reduce_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/reduce.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Classes | @@ -134,22 +148,25 @@ Enumerations Functions ReductionPlan mlx::core::get_reduction_plan (const array &x, const std::vector< int > &axes)   -void mlx::core::nd_loop (std::function< void(int)> callback, const std::vector< int > &shape, const std::vector< size_t > &strides) -  -std::pair< std::vector< int >, std::vector< size_t > > mlx::core::shapes_without_reduction_axes (const array &x, const std::vector< int > &axes) -  -template<typename T , typename U , typename OpS , typename OpC , typename Op > -void mlx::core::reduction_op (const array &x, array &out, const std::vector< int > &axes, U init, OpS ops, OpC opc, Op op) +void mlx::core::nd_loop (std::function< void(int)> callback, const Shape &shape, const Strides &strides) +  +std::pair< Shape, Stridesmlx::core::shapes_without_reduction_axes (const array &x, const std::vector< int > &axes) +  +template<typename T, typename U, typename OpS, typename OpC, typename Op> +void mlx::core::reduction_op (const array &x, array &out, const std::vector< int > &axes, U init, OpS ops, OpC opc, Op op)   -template<typename T , typename U , typename Op > -void mlx::core::reduction_op (const array &x, array &out, const std::vector< int > &axes, U init, Op op) +template<typename T, typename U, typename Op> +void mlx::core::reduction_op (const array &x, array &out, const std::vector< int > &axes, U init, Op op)  
    - -
    + + diff --git a/docs/build/html/common_2reduce_8h.js b/docs/build/html/common_2reduce_8h.js new file mode 100644 index 000000000..0648717b7 --- /dev/null +++ b/docs/build/html/common_2reduce_8h.js @@ -0,0 +1,19 @@ +var common_2reduce_8h = +[ + [ "mlx::core::ReductionPlan", "structmlx_1_1core_1_1_reduction_plan.html", "structmlx_1_1core_1_1_reduction_plan" ], + [ "mlx::core::DefaultStridedReduce< T, U, Op >", "structmlx_1_1core_1_1_default_strided_reduce.html", "structmlx_1_1core_1_1_default_strided_reduce" ], + [ "mlx::core::DefaultContiguousReduce< T, U, Op >", "structmlx_1_1core_1_1_default_contiguous_reduce.html", "structmlx_1_1core_1_1_default_contiguous_reduce" ], + [ "mlx::core::ReductionOpType", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65", [ + [ "mlx::core::ContiguousAllReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65ae4e34c7154eb8dc47aa8503209730424", null ], + [ "mlx::core::ContiguousReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65ad2547f25dffe8d8936dbec25601cfc84", null ], + [ "mlx::core::ContiguousStridedReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65ab48dac7508a2c790de1bdc33f29177ed", null ], + [ "mlx::core::GeneralContiguousReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65a540cf31fe6858115a02e789938297cdb", null ], + [ "mlx::core::GeneralStridedReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65ad999b1a8ae1d7436efb5ffdfafb1dd3d", null ], + [ "mlx::core::GeneralReduce", "namespacemlx_1_1core.html#a12412984a1cabfe1189942c898f8fe65a3622f95ed0ec99657f9ad8ef39ec2184", null ] + ] ], + [ "mlx::core::get_reduction_plan", "namespacemlx_1_1core.html#ac97b5a6f009ca3d99854ce9512c20dba", null ], + [ "mlx::core::nd_loop", "namespacemlx_1_1core.html#adbe9ca762e3e6cea8286c4636347c4b5", null ], + [ "mlx::core::reduction_op", "namespacemlx_1_1core.html#a064d61b6ddc9e5d1e261a7e33de71083", null ], + [ "mlx::core::reduction_op", "namespacemlx_1_1core.html#aa08ffc1e8f2c58afb2d463496f827ef0", null ], + [ "mlx::core::shapes_without_reduction_axes", "namespacemlx_1_1core.html#a0bea91a360a984e72d2815353f97ee25", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2reduce_8h_source.html b/docs/build/html/common_2reduce_8h_source.html index 4822fdf50..5d1c0b1b4 100644 --- a/docs/build/html/common_2reduce_8h_source.html +++ b/docs/build/html/common_2reduce_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/reduce.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    reduce.h
    @@ -127,237 +141,231 @@ $(function(){ initResizable(false); });
    33 // 0-stride axes or transpositions. We could copy the strides and produce a
    34 // transposed outcome or we can read the input out of order and write the
    35 // output in order.
    - -
    37};
    + +
    37};
    38
    - + -
    41 std::vector<int> shape;
    -
    42 std::vector<size_t> strides;
    + +
    43
    - -
    45 ReductionOpType type_,
    -
    46 std::vector<int> shape_,
    -
    47 std::vector<size_t> strides_)
    -
    48 : type(type_), shape(std::move(shape_)), strides(std::move(strides_)) {}
    +
    44 ReductionPlan(ReductionOpType type_, Shape shape_, Strides strides_)
    +
    45 : type(type_), shape(std::move(shape_)), strides(std::move(strides_)) {}
    - -
    50};
    + +
    47};
    -
    51
    -
    52ReductionPlan get_reduction_plan(const array& x, const std::vector<int>& axes);
    -
    53
    -
    54// Helper for the ndimensional strided loop
    -
    55// Should this be in utils?
    - -
    57 std::function<void(int)> callback,
    -
    58 const std::vector<int>& shape,
    -
    59 const std::vector<size_t>& strides);
    -
    60
    -
    61std::pair<std::vector<int>, std::vector<size_t>> shapes_without_reduction_axes(
    -
    62 const array& x,
    -
    63 const std::vector<int>& axes);
    -
    64
    -
    65template <typename T, typename U, typename Op>
    -
    - -
    67 Op op;
    -
    68
    -
    69 DefaultStridedReduce(Op op_) : op(op_) {}
    -
    70
    -
    -
    71 void operator()(const T* x, U* accumulator, int size, size_t stride) {
    -
    72 for (int i = 0; i < size; i++) {
    -
    73 U* moving_accumulator = accumulator;
    -
    74 for (int j = 0; j < stride; j++) {
    -
    75 op(moving_accumulator, *x);
    -
    76 moving_accumulator++;
    -
    77 x++;
    -
    78 }
    -
    79 }
    -
    80 }
    +
    48
    +
    49ReductionPlan get_reduction_plan(const array& x, const std::vector<int>& axes);
    +
    50
    +
    51// Helper for the ndimensional strided loop
    +
    52// Should this be in utils?
    + +
    54 std::function<void(int)> callback,
    +
    55 const Shape& shape,
    +
    56 const Strides& strides);
    +
    57
    +
    58std::pair<Shape, Strides> shapes_without_reduction_axes(
    +
    59 const array& x,
    +
    60 const std::vector<int>& axes);
    +
    61
    +
    62template <typename T, typename U, typename Op>
    +
    + +
    64 Op op;
    +
    65
    +
    66 DefaultStridedReduce(Op op_) : op(op_) {}
    +
    67
    +
    +
    68 void operator()(const T* x, U* accumulator, int size, size_t stride) {
    +
    69 for (int i = 0; i < size; i++) {
    +
    70 U* moving_accumulator = accumulator;
    +
    71 for (int j = 0; j < stride; j++) {
    +
    72 op(moving_accumulator, *x);
    +
    73 moving_accumulator++;
    +
    74 x++;
    +
    75 }
    +
    76 }
    +
    77 }
    -
    81};
    +
    78};
    -
    82
    -
    83template <typename T, typename U, typename Op>
    -
    - -
    85 Op op;
    -
    86
    -
    87 DefaultContiguousReduce(Op op_) : op(op_) {}
    -
    88
    -
    -
    89 void operator()(const T* x, U* accumulator, int size) {
    -
    90 while (size-- > 0) {
    -
    91 op(accumulator, *x);
    -
    92 x++;
    -
    93 }
    -
    94 }
    +
    79
    +
    80template <typename T, typename U, typename Op>
    +
    + +
    82 Op op;
    +
    83
    +
    84 DefaultContiguousReduce(Op op_) : op(op_) {}
    +
    85
    +
    +
    86 void operator()(const T* x, U* accumulator, int size) {
    +
    87 while (size-- > 0) {
    +
    88 op(accumulator, *x);
    +
    89 x++;
    +
    90 }
    +
    91 }
    -
    95};
    +
    92};
    -
    96
    -
    97template <typename T, typename U, typename OpS, typename OpC, typename Op>
    -
    - -
    99 const array& x,
    -
    100 array& out,
    -
    101 const std::vector<int>& axes,
    -
    102 U init,
    -
    103 OpS ops,
    -
    104 OpC opc,
    -
    105 Op op) {
    - -
    107 ReductionPlan plan = get_reduction_plan(x, axes);
    -
    108
    -
    109 if (plan.type == ContiguousAllReduce) {
    -
    110 U* out_ptr = out.data<U>();
    -
    111 *out_ptr = init;
    -
    112 opc(x.data<T>(), out_ptr, x.size());
    -
    113 return;
    -
    114 }
    -
    115
    -
    116 std::vector<int> shape;
    -
    117 std::vector<size_t> strides;
    -
    118
    -
    119 if (plan.type == ContiguousReduce && plan.shape.size() == 1) {
    -
    120 int reduction_size = plan.shape[0];
    -
    121 const T* x_ptr = x.data<T>();
    -
    122 U* out_ptr = out.data<U>();
    -
    123 for (int i = 0; i < out.size(); i++, out_ptr++, x_ptr += reduction_size) {
    -
    124 *out_ptr = init;
    -
    125 opc(x_ptr, out_ptr, reduction_size);
    -
    126 }
    -
    127 return;
    -
    128 }
    -
    129
    -
    130 if (plan.type == GeneralContiguousReduce || plan.type == ContiguousReduce) {
    -
    131 int reduction_size = plan.shape.back();
    -
    132 plan.shape.pop_back();
    -
    133 plan.strides.pop_back();
    -
    134 const T* x_ptr = x.data<T>();
    -
    135 U* out_ptr = out.data<U>();
    -
    136 // Unrolling the following loop (and implementing it in order for
    -
    137 // ContiguousReduce) should hold extra performance boost.
    -
    138 std::tie(shape, strides) = shapes_without_reduction_axes(x, axes);
    -
    139 if (plan.shape.size() == 0) {
    +
    93
    +
    94template <typename T, typename U, typename OpS, typename OpC, typename Op>
    +
    + +
    96 const array& x,
    +
    97 array& out,
    +
    98 const std::vector<int>& axes,
    +
    99 U init,
    +
    100 OpS ops,
    +
    101 OpC opc,
    +
    102 Op op) {
    + +
    104 ReductionPlan plan = get_reduction_plan(x, axes);
    +
    105
    +
    106 if (plan.type == ContiguousAllReduce) {
    +
    107 U* out_ptr = out.data<U>();
    +
    108 *out_ptr = init;
    +
    109 opc(x.data<T>(), out_ptr, x.size());
    +
    110 return;
    +
    111 }
    +
    112
    +
    113 if (plan.type == ContiguousReduce && plan.shape.size() == 1) {
    +
    114 int reduction_size = plan.shape[0];
    +
    115 const T* x_ptr = x.data<T>();
    +
    116 U* out_ptr = out.data<U>();
    +
    117 for (int i = 0; i < out.size(); i++, out_ptr++, x_ptr += reduction_size) {
    +
    118 *out_ptr = init;
    +
    119 opc(x_ptr, out_ptr, reduction_size);
    +
    120 }
    +
    121 return;
    +
    122 }
    +
    123
    +
    124 if (plan.type == GeneralContiguousReduce || plan.type == ContiguousReduce) {
    +
    125 int reduction_size = plan.shape.back();
    +
    126 plan.shape.pop_back();
    +
    127 plan.strides.pop_back();
    +
    128 const T* x_ptr = x.data<T>();
    +
    129 U* out_ptr = out.data<U>();
    +
    130 // Unrolling the following loop (and implementing it in order for
    +
    131 // ContiguousReduce) should hold extra performance boost.
    +
    132 auto [shape, strides] = shapes_without_reduction_axes(x, axes);
    +
    133 if (plan.shape.size() == 0) {
    +
    134 for (int i = 0; i < out.size(); i++, out_ptr++) {
    +
    135 int offset = elem_to_loc(i, shape, strides);
    +
    136 *out_ptr = init;
    +
    137 opc(x_ptr + offset, out_ptr, reduction_size);
    +
    138 }
    +
    139 } else {
    140 for (int i = 0; i < out.size(); i++, out_ptr++) {
    -
    141 int offset = elem_to_loc(i, shape, strides);
    +
    141 int offset = elem_to_loc(i, shape, strides);
    142 *out_ptr = init;
    -
    143 opc(x_ptr + offset, out_ptr, reduction_size);
    -
    144 }
    -
    145 } else {
    -
    146 for (int i = 0; i < out.size(); i++, out_ptr++) {
    -
    147 int offset = elem_to_loc(i, shape, strides);
    -
    148 *out_ptr = init;
    -
    149 nd_loop(
    -
    150 [&](int extra_offset) {
    -
    151 opc(x_ptr + offset + extra_offset, out_ptr, reduction_size);
    -
    152 },
    -
    153 plan.shape,
    -
    154 plan.strides);
    -
    155 }
    -
    156 }
    -
    157 return;
    -
    158 }
    -
    159
    -
    160 if (plan.type == ContiguousStridedReduce && plan.shape.size() == 1) {
    -
    161 int reduction_size = plan.shape.back();
    -
    162 size_t reduction_stride = plan.strides.back();
    -
    163 plan.shape.pop_back();
    -
    164 plan.strides.pop_back();
    -
    165 const T* x_ptr = x.data<T>();
    -
    166 U* out_ptr = out.data<U>();
    -
    167 for (int i = 0; i < out.size(); i += reduction_stride) {
    -
    168 std::fill_n(out_ptr, reduction_stride, init);
    -
    169 ops(x_ptr, out_ptr, reduction_size, reduction_stride);
    -
    170 x_ptr += reduction_stride * reduction_size;
    -
    171 out_ptr += reduction_stride;
    -
    172 }
    -
    173 return;
    -
    174 }
    -
    175
    -
    176 if (plan.type == GeneralStridedReduce ||
    - -
    178 int reduction_size = plan.shape.back();
    -
    179 size_t reduction_stride = plan.strides.back();
    -
    180 plan.shape.pop_back();
    -
    181 plan.strides.pop_back();
    -
    182 const T* x_ptr = x.data<T>();
    -
    183 U* out_ptr = out.data<U>();
    -
    184 std::tie(shape, strides) = shapes_without_reduction_axes(x, axes);
    -
    185 if (plan.shape.size() == 0) {
    -
    186 for (int i = 0; i < out.size(); i += reduction_stride) {
    -
    187 int offset = elem_to_loc(i, shape, strides);
    -
    188 std::fill_n(out_ptr, reduction_stride, init);
    -
    189 ops(x_ptr + offset, out_ptr, reduction_size, reduction_stride);
    -
    190 out_ptr += reduction_stride;
    -
    191 }
    -
    192 } else {
    -
    193 for (int i = 0; i < out.size(); i += reduction_stride) {
    -
    194 int offset = elem_to_loc(i, shape, strides);
    -
    195 std::fill_n(out_ptr, reduction_stride, init);
    -
    196 nd_loop(
    -
    197 [&](int extra_offset) {
    -
    198 ops(x_ptr + offset + extra_offset,
    -
    199 out_ptr,
    -
    200 reduction_size,
    -
    201 reduction_stride);
    -
    202 },
    -
    203 plan.shape,
    -
    204 plan.strides);
    -
    205 out_ptr += reduction_stride;
    -
    206 }
    -
    207 }
    -
    208 return;
    -
    209 }
    -
    210
    -
    211 if (plan.type == GeneralReduce) {
    -
    212 const T* x_ptr = x.data<T>();
    -
    213 U* out_ptr = out.data<U>();
    -
    214 std::tie(shape, strides) = shapes_without_reduction_axes(x, axes);
    -
    215 for (int i = 0; i < out.size(); i++, out_ptr++) {
    -
    216 int offset = elem_to_loc(i, shape, strides);
    -
    217 U val = init;
    -
    218 nd_loop(
    -
    219 [&](int extra_offset) { op(&val, *(x_ptr + offset + extra_offset)); },
    -
    220 plan.shape,
    -
    221 plan.strides);
    -
    222 *out_ptr = val;
    -
    223 }
    -
    224 }
    -
    225}
    +
    143 nd_loop(
    +
    144 [&](int extra_offset) {
    +
    145 opc(x_ptr + offset + extra_offset, out_ptr, reduction_size);
    +
    146 },
    +
    147 plan.shape,
    +
    148 plan.strides);
    +
    149 }
    +
    150 }
    +
    151 return;
    +
    152 }
    +
    153
    +
    154 if (plan.type == ContiguousStridedReduce && plan.shape.size() == 1) {
    +
    155 int reduction_size = plan.shape.back();
    +
    156 size_t reduction_stride = plan.strides.back();
    +
    157 plan.shape.pop_back();
    +
    158 plan.strides.pop_back();
    +
    159 const T* x_ptr = x.data<T>();
    +
    160 U* out_ptr = out.data<U>();
    +
    161 for (int i = 0; i < out.size(); i += reduction_stride) {
    +
    162 std::fill_n(out_ptr, reduction_stride, init);
    +
    163 ops(x_ptr, out_ptr, reduction_size, reduction_stride);
    +
    164 x_ptr += reduction_stride * reduction_size;
    +
    165 out_ptr += reduction_stride;
    +
    166 }
    +
    167 return;
    +
    168 }
    +
    169
    +
    170 if (plan.type == GeneralStridedReduce ||
    + +
    172 int reduction_size = plan.shape.back();
    +
    173 size_t reduction_stride = plan.strides.back();
    +
    174 plan.shape.pop_back();
    +
    175 plan.strides.pop_back();
    +
    176 const T* x_ptr = x.data<T>();
    +
    177 U* out_ptr = out.data<U>();
    +
    178 auto [shape, strides] = shapes_without_reduction_axes(x, axes);
    +
    179 if (plan.shape.size() == 0) {
    +
    180 for (int i = 0; i < out.size(); i += reduction_stride) {
    +
    181 int offset = elem_to_loc(i, shape, strides);
    +
    182 std::fill_n(out_ptr, reduction_stride, init);
    +
    183 ops(x_ptr + offset, out_ptr, reduction_size, reduction_stride);
    +
    184 out_ptr += reduction_stride;
    +
    185 }
    +
    186 } else {
    +
    187 for (int i = 0; i < out.size(); i += reduction_stride) {
    +
    188 int offset = elem_to_loc(i, shape, strides);
    +
    189 std::fill_n(out_ptr, reduction_stride, init);
    +
    190 nd_loop(
    +
    191 [&](int extra_offset) {
    +
    192 ops(x_ptr + offset + extra_offset,
    +
    193 out_ptr,
    +
    194 reduction_size,
    +
    195 reduction_stride);
    +
    196 },
    +
    197 plan.shape,
    +
    198 plan.strides);
    +
    199 out_ptr += reduction_stride;
    +
    200 }
    +
    201 }
    +
    202 return;
    +
    203 }
    +
    204
    +
    205 if (plan.type == GeneralReduce) {
    +
    206 const T* x_ptr = x.data<T>();
    +
    207 U* out_ptr = out.data<U>();
    +
    208 auto [shape, strides] = shapes_without_reduction_axes(x, axes);
    +
    209 for (int i = 0; i < out.size(); i++, out_ptr++) {
    +
    210 int offset = elem_to_loc(i, shape, strides);
    +
    211 U val = init;
    +
    212 nd_loop(
    +
    213 [&](int extra_offset) { op(&val, *(x_ptr + offset + extra_offset)); },
    +
    214 plan.shape,
    +
    215 plan.strides);
    +
    216 *out_ptr = val;
    +
    217 }
    +
    218 }
    +
    219}
    -
    226
    -
    227template <typename T, typename U, typename Op>
    -
    - -
    229 const array& x,
    -
    230 array& out,
    -
    231 const std::vector<int>& axes,
    -
    232 U init,
    -
    233 Op op) {
    - - -
    236 reduction_op<T, U>(x, out, axes, init, ops, opc, op);
    -
    237}
    +
    220
    +
    221template <typename T, typename U, typename Op>
    +
    + +
    223 const array& x,
    +
    224 array& out,
    +
    225 const std::vector<int>& axes,
    +
    226 U init,
    +
    227 Op op) {
    + + +
    230 reduction_op<T, U>(x, out, axes, init, ops, opc, op);
    +
    231}
    -
    238
    -
    239} // namespace mlx::core
    +
    232
    +
    233} // namespace mlx::core
    -
    Definition array.h:23
    -
    size_t nbytes() const
    The number of bytes in the array.
    Definition array.h:92
    -
    size_t size() const
    The number of elements in the array.
    Definition array.h:87
    -
    T * data()
    Definition array.h:341
    +
    Definition array.h:24
    +
    size_t nbytes() const
    The number of bytes in the array.
    Definition array.h:93
    +
    size_t size() const
    The number of elements in the array.
    Definition array.h:88
    +
    T * data()
    Definition array.h:342
    void set_data(allocator::Buffer buffer, Deleter d=allocator::free)
    -
    Op op
    Definition binary.h:129
    array std(const array &a, bool keepdims, int ddof=0, StreamOrDevice s={})
    Computes the standard deviation of the elements of an array.
    Buffer malloc_or_wait(size_t size)
    Definition allocator.h:7
    +
    std::pair< Shape, Strides > shapes_without_reduction_axes(const array &x, const std::vector< int > &axes)
    ReductionOpType
    Definition reduce.h:9
    @ GeneralReduce
    Definition reduce.h:36
    @ GeneralContiguousReduce
    Definition reduce.h:25
    @@ -365,30 +373,34 @@ $(function(){ initResizable(false); });
    @ ContiguousReduce
    Definition reduce.h:15
    @ GeneralStridedReduce
    Definition reduce.h:30
    @ ContiguousAllReduce
    Definition reduce.h:11
    -
    std::pair< std::vector< int >, std::vector< size_t > > shapes_without_reduction_axes(const array &x, const std::vector< int > &axes)
    -
    StrideT elem_to_loc(int elem, const std::vector< int > &shape, const std::vector< StrideT > &strides)
    Definition utils.h:12
    -
    void nd_loop(std::function< void(int)> callback, const std::vector< int > &shape, const std::vector< size_t > &strides)
    -
    void reduction_op(const array &x, array &out, const std::vector< int > &axes, U init, OpS ops, OpC opc, Op op)
    Definition reduce.h:98
    +
    int64_t elem_to_loc(int elem, const Shape &shape, const Strides &strides)
    Definition utils.h:12
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    +
    void reduction_op(const array &x, array &out, const std::vector< int > &axes, U init, OpS ops, OpC opc, Op op)
    Definition reduce.h:95
    ReductionPlan get_reduction_plan(const array &x, const std::vector< int > &axes)
    - -
    void operator()(const T *x, U *accumulator, int size)
    Definition reduce.h:89
    -
    Op op
    Definition reduce.h:85
    -
    DefaultContiguousReduce(Op op_)
    Definition reduce.h:87
    -
    Definition reduce.h:66
    -
    void operator()(const T *x, U *accumulator, int size, size_t stride)
    Definition reduce.h:71
    -
    DefaultStridedReduce(Op op_)
    Definition reduce.h:69
    -
    Op op
    Definition reduce.h:67
    +
    void nd_loop(std::function< void(int)> callback, const Shape &shape, const Strides &strides)
    + +
    void operator()(const T *x, U *accumulator, int size)
    Definition reduce.h:86
    +
    Op op
    Definition reduce.h:82
    +
    DefaultContiguousReduce(Op op_)
    Definition reduce.h:84
    +
    Definition reduce.h:63
    +
    void operator()(const T *x, U *accumulator, int size, size_t stride)
    Definition reduce.h:68
    +
    DefaultStridedReduce(Op op_)
    Definition reduce.h:66
    +
    Op op
    Definition reduce.h:64
    Definition reduce.h:39
    +
    ReductionPlan(ReductionOpType type_, Shape shape_, Strides strides_)
    Definition reduce.h:44
    +
    Shape shape
    Definition reduce.h:41
    ReductionOpType type
    Definition reduce.h:40
    -
    ReductionPlan(ReductionOpType type_, std::vector< int > shape_, std::vector< size_t > strides_)
    Definition reduce.h:44
    -
    std::vector< int > shape
    Definition reduce.h:41
    -
    std::vector< size_t > strides
    Definition reduce.h:42
    -
    ReductionPlan(ReductionOpType type_)
    Definition reduce.h:49
    +
    Strides strides
    Definition reduce.h:42
    +
    ReductionPlan(ReductionOpType type_)
    Definition reduce.h:46
    - -
    + + diff --git a/docs/build/html/common_2slicing_8h.html b/docs/build/html/common_2slicing_8h.html index 574f80524..561ca0b06 100644 --- a/docs/build/html/common_2slicing_8h.html +++ b/docs/build/html/common_2slicing_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/slicing.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - + -
    Namespaces | @@ -107,16 +121,19 @@ Namespaces - - - - + + + +

    Functions

    std::tuple< bool, int64_t, std::vector< int64_t > > mlx::core::prepare_slice (const array &in, const std::vector< int > &start_indices, const std::vector< int > &strides)
     
    void mlx::core::shared_buffer_slice (const array &in, const std::vector< size_t > &out_strides, size_t data_offset, size_t data_size, array &out)
     
    std::tuple< int64_t, Stridesmlx::core::prepare_slice (const array &in, const Shape &start_indices, const Shape &strides)
     
    void mlx::core::shared_buffer_slice (const array &in, const Strides &out_strides, size_t data_offset, size_t data_size, array &out)
     
    - -
    + + diff --git a/docs/build/html/common_2slicing_8h.js b/docs/build/html/common_2slicing_8h.js new file mode 100644 index 000000000..f3b45025b --- /dev/null +++ b/docs/build/html/common_2slicing_8h.js @@ -0,0 +1,5 @@ +var common_2slicing_8h = +[ + [ "mlx::core::prepare_slice", "namespacemlx_1_1core.html#a9fac4b96a3d783c6392ebc08c81ebdbd", null ], + [ "mlx::core::shared_buffer_slice", "namespacemlx_1_1core.html#a349a9fc2bfd950f679a3fe39b8bdedad", null ] +]; \ No newline at end of file diff --git a/docs/build/html/common_2slicing_8h_source.html b/docs/build/html/common_2slicing_8h_source.html index adaef11b5..3fe572907 100644 --- a/docs/build/html/common_2slicing_8h_source.html +++ b/docs/build/html/common_2slicing_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/slicing.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - + -
    slicing.h
    @@ -99,29 +113,34 @@ $(function(){ initResizable(false); });
    6
    7namespace mlx::core {
    8
    -
    9std::tuple<bool, int64_t, std::vector<int64_t>> prepare_slice(
    +
    9std::tuple<int64_t, Strides> prepare_slice(
    10 const array& in,
    -
    11 const std::vector<int>& start_indices,
    -
    12 const std::vector<int>& strides);
    +
    11 const Shape& start_indices,
    +
    12 const Shape& strides);
    13
    - +
    15 const array& in,
    -
    16 const std::vector<size_t>& out_strides,
    +
    16 const Strides& out_strides,
    17 size_t data_offset,
    18 size_t data_size,
    19 array& out);
    20
    21} // namespace mlx::core
    -
    Definition array.h:23
    +
    Definition array.h:24
    Definition allocator.h:7
    -
    std::tuple< bool, int64_t, std::vector< int64_t > > prepare_slice(const array &in, const std::vector< int > &start_indices, const std::vector< int > &strides)
    -
    void shared_buffer_slice(const array &in, const std::vector< size_t > &out_strides, size_t data_offset, size_t data_size, array &out)
    +
    void shared_buffer_slice(const array &in, const Strides &out_strides, size_t data_offset, size_t data_size, array &out)
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    +
    std::tuple< int64_t, Strides > prepare_slice(const array &in, const Shape &start_indices, const Shape &strides)
    - - + + diff --git a/docs/build/html/common_2ternary_8h.html b/docs/build/html/common_2ternary_8h.html index 0b0ab30c3..849624498 100644 --- a/docs/build/html/common_2ternary_8h.html +++ b/docs/build/html/common_2ternary_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/ternary.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -108,10 +122,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/common_2ternary_8h_source.html b/docs/build/html/common_2ternary_8h_source.html index 8cb3f3d4c..3af8287c8 100644 --- a/docs/build/html/common_2ternary_8h_source.html +++ b/docs/build/html/common_2ternary_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/ternary.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    ternary.h
    @@ -106,11 +120,11 @@ $(function(){ initResizable(false); });
    13enum class TernaryOpType {
    14 ScalarScalarScalar,
    15 VectorVectorVector,
    -
    16 General,
    +
    16 General,
    17};
    18
    19TernaryOpType
    -
    20get_ternary_op_type(const array& a, const array& b, const array& c) {
    +
    20get_ternary_op_type(const array& a, const array& b, const array& c) {
    21 TernaryOpType topt;
    22 if (a.data_size() == 1 && b.data_size() == 1 && c.data_size() == 1) {
    23 topt = TernaryOpType::ScalarScalarScalar;
    @@ -127,13 +141,13 @@ $(function(){ initResizable(false); });
    34}
    35
    36void set_ternary_op_output_data(
    -
    37 const array& a,
    -
    38 const array& b,
    -
    39 const array& c,
    -
    40 array& out,
    +
    37 const array& a,
    +
    38 const array& b,
    +
    39 const array& c,
    +
    40 array& out,
    41 TernaryOpType topt,
    42 bool donate_with_move = false) {
    -
    43 auto maybe_donate = [&out, donate_with_move](const array& x) {
    +
    43 auto maybe_donate = [&out, donate_with_move](const array& x) {
    44 if (is_donatable(x, out)) {
    45 if (donate_with_move) {
    46 out.move_shared_buffer(x);
    @@ -160,174 +174,184 @@ $(function(){ initResizable(false); });
    67 }
    68 break;
    69 case TernaryOpType::General:
    -
    70 out.set_data(allocator::malloc_or_wait(out.nbytes()));
    -
    71 break;
    -
    72 }
    -
    73}
    -
    74template <typename T1, typename T2, typename T3, typename U, typename Op, int D>
    -
    75void ternary_op_dims(
    -
    76 const T1* a,
    -
    77 const T2* b,
    -
    78 const T3* c,
    -
    79 U* out,
    -
    80 Op op,
    -
    81 const std::vector<int>& shape,
    -
    82 const std::vector<size_t>& a_strides,
    -
    83 const std::vector<size_t>& b_strides,
    -
    84 const std::vector<size_t>& c_strides,
    -
    85 const std::vector<size_t>& out_strides,
    -
    86 int axis) {
    -
    87 auto stride_a = a_strides[axis];
    -
    88 auto stride_b = b_strides[axis];
    -
    89 auto stride_c = c_strides[axis];
    -
    90 auto stride_out = out_strides[axis];
    -
    91 auto N = shape[axis];
    -
    92
    -
    93 for (int i = 0; i < N; i++) {
    -
    94 if constexpr (D > 1) {
    -
    95 ternary_op_dims<T1, T2, T3, U, Op, D - 1>(
    -
    96 a,
    -
    97 b,
    -
    98 c,
    -
    99 out,
    -
    100 op,
    -
    101 shape,
    -
    102 a_strides,
    -
    103 b_strides,
    -
    104 c_strides,
    -
    105 out_strides,
    -
    106 axis + 1);
    -
    107 } else {
    -
    108 *out = op(*a, *b, *c);
    -
    109 }
    -
    110 a += stride_a;
    -
    111 b += stride_b;
    -
    112 c += stride_c;
    -
    113 out += stride_out;
    -
    114 }
    -
    115}
    -
    116
    -
    117template <typename T1, typename T2, typename T3, typename U, typename Op>
    -
    118void ternary_op_dispatch_dims(
    -
    119 const array& a,
    -
    120 const array& b,
    -
    121 const array& c,
    -
    122 array& out,
    -
    123 Op op) {
    -
    124 auto [shape, strides] = collapse_contiguous_dims(
    -
    125 a.shape(), {a.strides(), b.strides(), c.strides(), out.strides()});
    -
    126 const auto& a_strides = strides[0];
    -
    127 const auto& b_strides = strides[1];
    -
    128 const auto& c_strides = strides[2];
    -
    129 const auto& out_strides = strides[3];
    -
    130
    -
    131 const T1* a_ptr = a.data<T1>();
    -
    132 const T2* b_ptr = b.data<T2>();
    -
    133 const T3* c_ptr = c.data<T3>();
    -
    134 U* out_ptr = out.data<T3>();
    -
    135 int ndim = shape.size();
    -
    136 switch (ndim) {
    -
    137 case 1:
    -
    138 ternary_op_dims<T1, T2, T3, U, Op, 1>(
    -
    139 a_ptr,
    -
    140 b_ptr,
    -
    141 c_ptr,
    -
    142 out_ptr,
    -
    143 op,
    -
    144 shape,
    -
    145 a_strides,
    -
    146 b_strides,
    -
    147 c_strides,
    -
    148 out_strides,
    -
    149 0);
    -
    150 return;
    -
    151 case 2:
    -
    152 ternary_op_dims<T1, T2, T3, U, Op, 2>(
    -
    153 a_ptr,
    -
    154 b_ptr,
    -
    155 c_ptr,
    -
    156 out_ptr,
    -
    157 op,
    -
    158 shape,
    -
    159 a_strides,
    -
    160 b_strides,
    -
    161 c_strides,
    -
    162 out_strides,
    -
    163 0);
    -
    164 return;
    -
    165 }
    -
    166
    -
    167 ContiguousIterator<size_t> a_it(shape, a_strides, ndim - 2);
    -
    168 ContiguousIterator<size_t> b_it(shape, b_strides, ndim - 2);
    -
    169 ContiguousIterator<size_t> c_it(shape, c_strides, ndim - 2);
    -
    170 size_t stride = out_strides[ndim - 3];
    -
    171 for (size_t elem = 0; elem < a.size(); elem += stride) {
    -
    172 ternary_op_dims<T1, T2, T3, U, Op, 2>(
    -
    173 a_ptr + a_it.loc,
    -
    174 b_ptr + b_it.loc,
    -
    175 c_ptr + c_it.loc,
    -
    176 out_ptr + elem,
    -
    177 op,
    -
    178 shape,
    -
    179 a_strides,
    -
    180 b_strides,
    -
    181 c_strides,
    -
    182 out_strides,
    -
    183 ndim - 2);
    -
    184 a_it.step();
    -
    185 b_it.step();
    -
    186 c_it.step();
    -
    187 }
    -
    188}
    -
    189
    -
    190template <typename T1, typename T2, typename T3, typename U, typename Op>
    -
    191void ternary_op(
    -
    192 const array& a,
    -
    193 const array& b,
    -
    194 const array& c,
    -
    195 array& out,
    -
    196 Op op) {
    -
    197 TernaryOpType topt = get_ternary_op_type(a, b, c);
    -
    198 set_ternary_op_output_data(a, b, c, out, topt);
    -
    199
    -
    200 // The full computation is scalar-scalar-scalar so we call the base op once.
    -
    201 if (topt == TernaryOpType::ScalarScalarScalar) {
    -
    202 *(out.data<U>()) = op(*a.data<T1>(), *b.data<T2>(), *c.data<T3>());
    -
    203 } else if (topt == TernaryOpType::VectorVectorVector) {
    -
    204 const T1* a_ptr = a.data<T1>();
    -
    205 const T2* b_ptr = b.data<T2>();
    -
    206 const T3* c_ptr = c.data<T3>();
    -
    207 U* out_ptr = out.data<U>();
    -
    208 for (size_t i = 0; i < out.size(); ++i) {
    -
    209 *out_ptr = op(*a_ptr, *b_ptr, *c_ptr);
    -
    210 a_ptr++;
    -
    211 b_ptr++;
    -
    212 c_ptr++;
    -
    213 out_ptr++;
    -
    214 }
    -
    215 } else {
    -
    216 ternary_op_dispatch_dims<T1, T2, T3, U>(a, b, c, out, op);
    -
    217 }
    -
    218}
    -
    219
    -
    220} // namespace
    -
    221
    -
    222} // namespace mlx::core
    +
    70 // Try to donate an input which is row_contiguous
    +
    71 if (!((a.flags().row_contiguous && maybe_donate(a)) ||
    +
    72 (b.flags().row_contiguous && maybe_donate(b)) ||
    +
    73 (c.flags().row_contiguous && maybe_donate(c)))) {
    +
    74 out.set_data(allocator::malloc_or_wait(out.nbytes()));
    +
    75 }
    +
    76 break;
    +
    77 }
    +
    78}
    +
    79template <typename T1, typename T2, typename T3, typename U, typename Op, int D>
    +
    80void ternary_op_dims(
    +
    81 const T1* a,
    +
    82 const T2* b,
    +
    83 const T3* c,
    +
    84 U* out,
    +
    85 Op op,
    +
    86 const Shape& shape,
    +
    87 const Strides& a_strides,
    +
    88 const Strides& b_strides,
    +
    89 const Strides& c_strides,
    +
    90 const Strides& out_strides,
    +
    91 int axis) {
    +
    92 auto stride_a = a_strides[axis];
    +
    93 auto stride_b = b_strides[axis];
    +
    94 auto stride_c = c_strides[axis];
    +
    95 auto stride_out = out_strides[axis];
    +
    96 auto N = shape[axis];
    +
    97
    +
    98 for (int i = 0; i < N; i++) {
    +
    99 if constexpr (D > 1) {
    +
    100 ternary_op_dims<T1, T2, T3, U, Op, D - 1>(
    +
    101 a,
    +
    102 b,
    +
    103 c,
    +
    104 out,
    +
    105 op,
    +
    106 shape,
    +
    107 a_strides,
    +
    108 b_strides,
    +
    109 c_strides,
    +
    110 out_strides,
    +
    111 axis + 1);
    +
    112 } else {
    +
    113 *out = op(*a, *b, *c);
    +
    114 }
    +
    115 a += stride_a;
    +
    116 b += stride_b;
    +
    117 c += stride_c;
    +
    118 out += stride_out;
    +
    119 }
    +
    120}
    +
    121
    +
    122template <typename T1, typename T2, typename T3, typename U, typename Op>
    +
    123void ternary_op_dispatch_dims(
    +
    124 const array& a,
    +
    125 const array& b,
    +
    126 const array& c,
    +
    127 array& out,
    +
    128 Op op) {
    +
    129 auto [shape, strides] = collapse_contiguous_dims(
    +
    130 a.shape(), {a.strides(), b.strides(), c.strides(), out.strides()});
    +
    131 const auto& a_strides = strides[0];
    +
    132 const auto& b_strides = strides[1];
    +
    133 const auto& c_strides = strides[2];
    +
    134 const auto& out_strides = strides[3];
    +
    135
    +
    136 const T1* a_ptr = a.data<T1>();
    +
    137 const T2* b_ptr = b.data<T2>();
    +
    138 const T3* c_ptr = c.data<T3>();
    +
    139 U* out_ptr = out.data<T3>();
    +
    140 int ndim = shape.size();
    +
    141 switch (ndim) {
    +
    142 case 1:
    +
    143 ternary_op_dims<T1, T2, T3, U, Op, 1>(
    +
    144 a_ptr,
    +
    145 b_ptr,
    +
    146 c_ptr,
    +
    147 out_ptr,
    +
    148 op,
    +
    149 shape,
    +
    150 a_strides,
    +
    151 b_strides,
    +
    152 c_strides,
    +
    153 out_strides,
    +
    154 0);
    +
    155 return;
    +
    156 case 2:
    +
    157 ternary_op_dims<T1, T2, T3, U, Op, 2>(
    +
    158 a_ptr,
    +
    159 b_ptr,
    +
    160 c_ptr,
    +
    161 out_ptr,
    +
    162 op,
    +
    163 shape,
    +
    164 a_strides,
    +
    165 b_strides,
    +
    166 c_strides,
    +
    167 out_strides,
    +
    168 0);
    +
    169 return;
    +
    170 }
    +
    171
    +
    172 ContiguousIterator a_it(shape, a_strides, ndim - 2);
    +
    173 ContiguousIterator b_it(shape, b_strides, ndim - 2);
    +
    174 ContiguousIterator c_it(shape, c_strides, ndim - 2);
    +
    175 auto stride = out_strides[ndim - 3];
    +
    176 for (size_t elem = 0; elem < a.size(); elem += stride) {
    +
    177 ternary_op_dims<T1, T2, T3, U, Op, 2>(
    +
    178 a_ptr + a_it.loc,
    +
    179 b_ptr + b_it.loc,
    +
    180 c_ptr + c_it.loc,
    +
    181 out_ptr + elem,
    +
    182 op,
    +
    183 shape,
    +
    184 a_strides,
    +
    185 b_strides,
    +
    186 c_strides,
    +
    187 out_strides,
    +
    188 ndim - 2);
    +
    189 a_it.step();
    +
    190 b_it.step();
    +
    191 c_it.step();
    +
    192 }
    +
    193}
    +
    194
    +
    195template <typename T1, typename T2, typename T3, typename U, typename Op>
    +
    196void ternary_op(
    +
    197 const array& a,
    +
    198 const array& b,
    +
    199 const array& c,
    +
    200 array& out,
    +
    201 Op op) {
    +
    202 TernaryOpType topt = get_ternary_op_type(a, b, c);
    +
    203 set_ternary_op_output_data(a, b, c, out, topt);
    +
    204
    +
    205 // The full computation is scalar-scalar-scalar so we call the base op once.
    +
    206 if (topt == TernaryOpType::ScalarScalarScalar) {
    +
    207 *(out.data<U>()) = op(*a.data<T1>(), *b.data<T2>(), *c.data<T3>());
    +
    208 } else if (topt == TernaryOpType::VectorVectorVector) {
    +
    209 const T1* a_ptr = a.data<T1>();
    +
    210 const T2* b_ptr = b.data<T2>();
    +
    211 const T3* c_ptr = c.data<T3>();
    +
    212 U* out_ptr = out.data<U>();
    +
    213 for (size_t i = 0; i < out.size(); ++i) {
    +
    214 *out_ptr = op(*a_ptr, *b_ptr, *c_ptr);
    +
    215 a_ptr++;
    +
    216 b_ptr++;
    +
    217 c_ptr++;
    +
    218 out_ptr++;
    +
    219 }
    +
    220 } else {
    +
    221 ternary_op_dispatch_dims<T1, T2, T3, U>(a, b, c, out, op);
    +
    222 }
    +
    223}
    +
    224
    +
    225} // namespace
    +
    226
    +
    227} // namespace mlx::core
    -
    Op op
    Definition binary.h:129
    +
    Definition array.h:24
    Buffer malloc_or_wait(size_t size)
    Definition allocator.h:7
    -
    std::tuple< std::vector< int >, std::vector< std::vector< int64_t > > > collapse_contiguous_dims(const std::vector< int > &shape, const std::vector< std::vector< int64_t > > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    - -
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:174
    +
    std::tuple< Shape, std::vector< Strides > > collapse_contiguous_dims(const Shape &shape, const std::vector< Strides > &strides, int64_t size_cap=std::numeric_limits< int32_t >::max())
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    +
    std::vector< int64_t > Strides
    Definition array.h:22
    +
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:155
    +
    Definition utils.h:73
    - - + + diff --git a/docs/build/html/common_2unary_8h.html b/docs/build/html/common_2unary_8h.html index 68477cff6..c06947eae 100644 --- a/docs/build/html/common_2unary_8h.html +++ b/docs/build/html/common_2unary_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/unary.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -108,10 +122,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/common_2unary_8h_source.html b/docs/build/html/common_2unary_8h_source.html index a6879dd7c..69372e670 100644 --- a/docs/build/html/common_2unary_8h_source.html +++ b/docs/build/html/common_2unary_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/unary.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    unary.h
    @@ -104,7 +118,7 @@ $(function(){ initResizable(false); });
    11
    12namespace {
    13
    -
    14void set_unary_output_data(const array& in, array& out) {
    +
    14void set_unary_output_data(const array& in, array& out) {
    15 if (is_donatable(in, out)) {
    16 out.copy_shared_buffer(in);
    17 } else {
    @@ -118,98 +132,98 @@ $(function(){ initResizable(false); });
    25}
    26
    27template <typename T, typename U = T, typename Op>
    -
    28void unary_op(const T* a, U* out, Op op, size_t shape, size_t stride) {
    +
    28void unary_op(const T* a, U* out, Op op, size_t shape, size_t stride) {
    29 for (size_t i = 0; i < shape; i += 1) {
    -
    30 out[i] = op(*a);
    +
    30 out[i] = op(*a);
    31 a += stride;
    32 }
    33}
    34
    35template <typename T, typename U = T, typename Op>
    -
    36void unary_op(const array& a, array& out, Op op) {
    +
    36void unary_op(const array& a, array& out, Op op) {
    37 const T* a_ptr = a.data<T>();
    38 if (a.flags().contiguous) {
    39 set_unary_output_data(a, out);
    -
    40 U* dst = out.data<U>();
    +
    40 U* dst = out.data<U>();
    41 for (size_t i = 0; i < a.data_size(); ++i) {
    -
    42 dst[i] = op(a_ptr[i]);
    +
    42 dst[i] = op(a_ptr[i]);
    43 }
    44 } else {
    45 out.set_data(allocator::malloc_or_wait(out.nbytes()));
    -
    46 U* dst = out.data<U>();
    +
    46 U* dst = out.data<U>();
    47 size_t shape = a.ndim() > 0 ? a.shape(-1) : 1;
    48 size_t stride = a.ndim() > 0 ? a.strides(-1) : 1;
    49 if (a.ndim() <= 1) {
    -
    50 unary_op(a_ptr, dst, op, shape, stride);
    +
    50 unary_op(a_ptr, dst, op, shape, stride);
    51 return;
    52 }
    -
    53 ContiguousIterator it(a.shape(), a.strides(), a.ndim() - 1);
    +
    53 ContiguousIterator it(a.shape(), a.strides(), a.ndim() - 1);
    54 for (size_t elem = 0; elem < a.size(); elem += shape) {
    -
    55 unary_op(a_ptr + it.loc, dst + elem, op, shape, stride);
    +
    55 unary_op(a_ptr + it.loc, dst + elem, op, shape, stride);
    56 it.step();
    57 }
    58 }
    59}
    60
    61template <typename Op>
    -
    62void unary(const array& a, array& out, Op op) {
    +
    62void unary(const array& a, array& out, Op op) {
    63 switch (out.dtype()) {
    64 case bool_:
    -
    65 unary_op<bool>(a, out, op);
    +
    65 unary_op<bool>(a, out, op);
    66 break;
    67 case uint8:
    -
    68 unary_op<uint8_t>(a, out, op);
    +
    68 unary_op<uint8_t>(a, out, op);
    69 break;
    70 case uint16:
    -
    71 unary_op<uint16_t>(a, out, op);
    +
    71 unary_op<uint16_t>(a, out, op);
    72 break;
    73 case uint32:
    -
    74 unary_op<uint32_t>(a, out, op);
    +
    74 unary_op<uint32_t>(a, out, op);
    75 break;
    76 case uint64:
    -
    77 unary_op<uint64_t>(a, out, op);
    +
    77 unary_op<uint64_t>(a, out, op);
    78 break;
    79 case int8:
    -
    80 unary_op<int8_t>(a, out, op);
    +
    80 unary_op<int8_t>(a, out, op);
    81 break;
    82 case int16:
    -
    83 unary_op<int16_t>(a, out, op);
    +
    83 unary_op<int16_t>(a, out, op);
    84 break;
    85 case int32:
    -
    86 unary_op<int32_t>(a, out, op);
    +
    86 unary_op<int32_t>(a, out, op);
    87 break;
    88 case int64:
    -
    89 unary_op<int64_t>(a, out, op);
    +
    89 unary_op<int64_t>(a, out, op);
    90 break;
    91 case float16:
    -
    92 unary_op<float16_t>(a, out, op);
    +
    92 unary_op<float16_t>(a, out, op);
    93 break;
    94 case float32:
    -
    95 unary_op<float>(a, out, op);
    +
    95 unary_op<float>(a, out, op);
    96 break;
    97 case bfloat16:
    -
    98 unary_op<bfloat16_t>(a, out, op);
    +
    98 unary_op<bfloat16_t>(a, out, op);
    99 break;
    100 case complex64:
    -
    101 unary_op<complex64_t>(a, out, op);
    +
    101 unary_op<complex64_t>(a, out, op);
    102 break;
    103 }
    104}
    105
    106template <typename Op>
    -
    107void unary_fp(const array& a, array& out, Op op) {
    +
    107void unary_fp(const array& a, array& out, Op op) {
    108 switch (out.dtype()) {
    109 case bfloat16:
    -
    110 unary_op<bfloat16_t>(a, out, op);
    +
    110 unary_op<bfloat16_t>(a, out, op);
    111 break;
    112 case float16:
    -
    113 unary_op<float16_t>(a, out, op);
    +
    113 unary_op<float16_t>(a, out, op);
    114 break;
    115 case float32:
    -
    116 unary_op<float>(a, out, op);
    +
    116 unary_op<float>(a, out, op);
    117 break;
    118 case complex64:
    -
    119 unary_op<complex64_t>(a, out, op);
    +
    119 unary_op<complex64_t>(a, out, op);
    120 break;
    121 default:
    122 std::ostringstream err;
    @@ -224,7 +238,7 @@ $(function(){ initResizable(false); }); -
    Op op
    Definition binary.h:129
    +
    Definition array.h:24
    Buffer malloc_or_wait(size_t size)
    const char * unary()
    Definition allocator.h:7
    @@ -240,14 +254,19 @@ $(function(){ initResizable(false); });
    constexpr Dtype uint8
    Definition dtype.h:69
    constexpr Dtype float16
    Definition dtype.h:79
    constexpr Dtype uint32
    Definition dtype.h:71
    -
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:174
    +
    bool is_donatable(const array &in, const array &out)
    Definition utils.h:155
    constexpr Dtype complex64
    Definition dtype.h:82
    +
    void dst(const shape_t &shape, const stride_t &stride_in, const stride_t &stride_out, const shape_t &axes, int type, const T *data_in, T *data_out, T fct, bool ortho, size_t nthreads=1)
    Definition pocketfft.h:3416
    +
    Definition utils.h:73
    - - + + diff --git a/docs/build/html/compile_8h.html b/docs/build/html/compile_8h.html index 643349281..5f0f9527f 100644 --- a/docs/build/html/compile_8h.html +++ b/docs/build/html/compile_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/compile.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Namespaces | @@ -122,8 +136,8 @@ Functions   std::function< std::vector< array >(const std::vector< array > &)> mlx::core::compile (std::vector< array >(fun)(const std::vector< array > &), bool shapeless=false)   -template<typename F > -std::function< std::vector< array >(const std::vector< array > &)> mlx::core::compile (F &&f, bool shapeless=false) +template<typename F> +std::function< std::vector< array >(const std::vector< array > &)> mlx::core::compile (F &&f, bool shapeless=false)   void mlx::core::disable_compile ()  Globally disable compilation.
    @@ -136,10 +150,13 @@ Functions  
    - -
    + + diff --git a/docs/build/html/compile_8h.js b/docs/build/html/compile_8h.js new file mode 100644 index 000000000..a61e7f82b --- /dev/null +++ b/docs/build/html/compile_8h.js @@ -0,0 +1,15 @@ +var compile_8h = +[ + [ "mlx::core::CompileMode", "namespacemlx_1_1core.html#adb15ff2b1ca5207fd4f6e631e2c3bcb4", [ + [ "mlx::core::CompileMode::disabled", "namespacemlx_1_1core.html#adb15ff2b1ca5207fd4f6e631e2c3bcb4a075ae3d2fc31640504f814f60e5ef713", null ], + [ "mlx::core::CompileMode::no_simplify", "namespacemlx_1_1core.html#adb15ff2b1ca5207fd4f6e631e2c3bcb4a8e5611dfddbae6e68624c59aa3e4e3e2", null ], + [ "mlx::core::CompileMode::no_fuse", "namespacemlx_1_1core.html#adb15ff2b1ca5207fd4f6e631e2c3bcb4ada8df7fd43da6073fec4fe5666b03dbb", null ], + [ "mlx::core::CompileMode::enabled", "namespacemlx_1_1core.html#adb15ff2b1ca5207fd4f6e631e2c3bcb4aa10311459433adf322f2590a4987c423", null ] + ] ], + [ "mlx::core::compile", "namespacemlx_1_1core.html#ace67713d269595f5f2265e46728a6f9c", null ], + [ "mlx::core::compile", "namespacemlx_1_1core.html#a55933c6665de9f81059120d6b0de1c87", null ], + [ "mlx::core::compile", "namespacemlx_1_1core.html#a56de948c2dffbf35c88035bc1561db53", null ], + [ "mlx::core::disable_compile", "namespacemlx_1_1core.html#a5f5fea955057bb3842b271b037909e66", null ], + [ "mlx::core::enable_compile", "namespacemlx_1_1core.html#a1983a2466bff3bae4d23cf34bd0946c9", null ], + [ "mlx::core::set_compile_mode", "namespacemlx_1_1core.html#a49445a55f976c4397f25ea18e1e92bef", null ] +]; \ No newline at end of file diff --git a/docs/build/html/compile_8h_source.html b/docs/build/html/compile_8h_source.html index 25516379f..951e06a6a 100644 --- a/docs/build/html/compile_8h_source.html +++ b/docs/build/html/compile_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/compile.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    compile.h
    @@ -100,7 +114,7 @@ $(function(){ initResizable(false); });
    7namespace mlx::core {
    8
    -
    10
    +
    10
    12std::function<std::vector<array>(const std::vector<array>&)> compile(
    13 std::function<std::vector<array>(const std::vector<array>&)> fun,
    14 bool shapeless = false);
    @@ -116,16 +130,16 @@ $(function(){ initResizable(false); });
    24 std::is_convertible_v<F, decltype(+std::declval<F>())>>>
    25std::function<std::vector<array>(const std::vector<array>&)> compile(
    -
    26 F&& f,
    +
    26 F&& f,
    27 bool shapeless = false) {
    -
    28 return compile(+f, shapeless);
    +
    28 return compile(+f, shapeless);
    29}
    -
    30
    +
    30
    -
    36
    +
    36
    -
    41
    +
    41
    44} // namespace mlx::core
    @@ -135,16 +149,18 @@ $(function(){ initResizable(false); });
    std::function< std::vector< array >(const std::vector< array > &)> compile(std::function< std::vector< array >(const std::vector< array > &)> fun, bool shapeless=false)
    Compile takes a function and returns a compiled function.
    void disable_compile()
    Globally disable compilation.
    CompileMode
    Definition compile.h:9
    - - - - -
    float f
    Definition bf16.h:16
    +
    @ disabled
    Definition compile.h:9
    +
    @ no_simplify
    Definition compile.h:9
    +
    @ enabled
    Definition compile.h:9
    +
    @ no_fuse
    Definition compile.h:9
    - - + + diff --git a/docs/build/html/compile__impl_8h.html b/docs/build/html/compile__impl_8h.html index 8257c1763..9c9fcd7c1 100644 --- a/docs/build/html/compile__impl_8h.html +++ b/docs/build/html/compile__impl_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/compile_impl.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    compile_impl.h File Reference
    -
    #include "mlx/device.h"
    +
    #include <unordered_map>
    +#include "mlx/array.h"

    Go to the source code of this file.

    @@ -107,6 +123,11 @@ Namespaces
    namespace  mlx::core::detail
     
    + + + +

    +Typedefs

    using mlx::core::detail::ParentsMap
     
    @@ -117,12 +138,25 @@ Functions + + + + + + + + + +

    Functions

    std::function< std::vector< array >(const std::vector< array > &)> mlx::core::detail::compile (std::function< std::vector< array >(const std::vector< array > &)> fun, std::uintptr_t fun_id, bool shapeless=false, std::vector< uint64_t > constants={})
     
    bool mlx::core::detail::compile_available_for_device (const Device &device)
     
    std::pair< std::vector< array >, std::vector< array > > mlx::core::detail::compile_trace (const std::function< std::vector< array >(const std::vector< array > &)> &fun, const std::vector< array > &inputs, bool shapeless)
     
    std::pair< std::vector< array >, ParentsMapmlx::core::detail::compile_dfs (const std::vector< array > &inputs, const std::vector< array > &outputs, const std::vector< array > &original_inputs)
     
    void mlx::core::detail::compile_simplify (std::vector< array > &tape, ParentsMap &parents_map, std::vector< array > &outputs, int passes)
     
    std::vector< arraymlx::core::detail::compile_replace (const std::vector< array > &tape, const std::vector< array > &trace_inputs, const std::vector< array > &trace_outputs, const std::vector< array > &inputs, bool shapeless)
     
    void mlx::core::detail::compile_validate_shapeless (const std::vector< array > &tape)
     
    - -
    + + diff --git a/docs/build/html/compile__impl_8h.js b/docs/build/html/compile__impl_8h.js new file mode 100644 index 000000000..1d5e84d0a --- /dev/null +++ b/docs/build/html/compile__impl_8h.js @@ -0,0 +1,13 @@ +var compile__impl_8h = +[ + [ "mlx::core::detail::ParentsMap", "namespacemlx_1_1core_1_1detail.html#aac5e13ecbb521f3ac0e27d98d15fa985", null ], + [ "mlx::core::detail::compile", "namespacemlx_1_1core_1_1detail.html#af556c7576658b2e2498ead70339d95e5", null ], + [ "mlx::core::detail::compile_available_for_device", "namespacemlx_1_1core_1_1detail.html#aeeff2ba6ec3d9d4ed090de6d2681dbc2", null ], + [ "mlx::core::detail::compile_clear_cache", "namespacemlx_1_1core_1_1detail.html#a3fb927c209b946aefebb195993fbe4cf", null ], + [ "mlx::core::detail::compile_dfs", "namespacemlx_1_1core_1_1detail.html#a545fccdb5dc365b154cf4f0a2ca4753b", null ], + [ "mlx::core::detail::compile_erase", "namespacemlx_1_1core_1_1detail.html#a69eb76a14f845ca000f1ccb2edda0175", null ], + [ "mlx::core::detail::compile_replace", "namespacemlx_1_1core_1_1detail.html#a56fc01df6ba4c508d1da8b366b1328ac", null ], + [ "mlx::core::detail::compile_simplify", "namespacemlx_1_1core_1_1detail.html#a33c878c900ca06f35d479f99c57b9e39", null ], + [ "mlx::core::detail::compile_trace", "namespacemlx_1_1core_1_1detail.html#ac2163a401119bb6edecfeb43373ef0dd", null ], + [ "mlx::core::detail::compile_validate_shapeless", "namespacemlx_1_1core_1_1detail.html#a10d612cb45a17fa17b704a357a902a68", null ] +]; \ No newline at end of file diff --git a/docs/build/html/compile__impl_8h_source.html b/docs/build/html/compile__impl_8h_source.html index e19210163..aebfc8532 100644 --- a/docs/build/html/compile__impl_8h_source.html +++ b/docs/build/html/compile__impl_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/compile_impl.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    compile_impl.h
    @@ -95,39 +109,81 @@ $(function(){ initResizable(false); });
    2
    3#pragma once
    4
    -
    5#include "mlx/device.h"
    +
    5#include <unordered_map>
    6
    -
    7namespace mlx::core::detail {
    +
    7#include "mlx/array.h"
    8
    -
    9// This is not part of the general C++ API as calling with a bad id is a bad
    -
    10// idea.
    -
    11std::function<std::vector<array>(const std::vector<array>&)> compile(
    -
    12 std::function<std::vector<array>(const std::vector<array>&)> fun,
    -
    13 std::uintptr_t fun_id,
    -
    14 bool shapeless = false,
    -
    15 std::vector<uint64_t> constants = {});
    -
    16
    -
    17// Erase cached compile functions
    -
    18void compile_erase(std::uintptr_t fun_id);
    -
    19
    -
    20// Clear the compiler cache causing a recompilation of all compiled functions
    -
    21// when called again.
    - -
    23
    - -
    25} // namespace mlx::core::detail
    - +
    9namespace mlx::core::detail {
    +
    10
    +
    11// This is not part of the general C++ API as calling with a bad id is a bad
    +
    12// idea.
    +
    13std::function<std::vector<array>(const std::vector<array>&)> compile(
    +
    14 std::function<std::vector<array>(const std::vector<array>&)> fun,
    +
    15 std::uintptr_t fun_id,
    +
    16 bool shapeless = false,
    +
    17 std::vector<uint64_t> constants = {});
    +
    18
    +
    19// Erase cached compile functions
    +
    20void compile_erase(std::uintptr_t fun_id);
    +
    21
    +
    22// Clear the compiler cache causing a recompilation of all compiled functions
    +
    23// when called again.
    + +
    25
    + +
    27
    +
    28std::pair<std::vector<array>, std::vector<array>> compile_trace(
    +
    29 const std::function<std::vector<array>(const std::vector<array>&)>& fun,
    +
    30 const std::vector<array>& inputs,
    +
    31 bool shapeless);
    +
    32
    + +
    34 std::unordered_map<std::uintptr_t, std::vector<std::pair<array, int>>>;
    +
    35
    +
    36// Traverses the graph to build a tape and a map of array ids to their parents
    +
    37std::pair<std::vector<array>, ParentsMap> compile_dfs(
    +
    38 const std::vector<array>& inputs,
    +
    39 const std::vector<array>& outputs,
    +
    40 const std::vector<array>& original_inputs);
    +
    41
    +
    42// Simplify the tape.
    + +
    44 std::vector<array>& tape,
    +
    45 ParentsMap& parents_map,
    +
    46 std::vector<array>& outputs,
    +
    47 int passes);
    +
    48
    +
    49std::vector<array> compile_replace(
    +
    50 const std::vector<array>& tape,
    +
    51 const std::vector<array>& trace_inputs,
    +
    52 const std::vector<array>& trace_outputs,
    +
    53 const std::vector<array>& inputs,
    +
    54 bool shapeless);
    +
    55
    +
    56void compile_validate_shapeless(const std::vector<array>& tape);
    +
    57
    +
    58} // namespace mlx::core::detail
    +
    Definition ops.h:8
    +
    void compile_validate_shapeless(const std::vector< array > &tape)
    +
    void compile_simplify(std::vector< array > &tape, ParentsMap &parents_map, std::vector< array > &outputs, int passes)
    void compile_clear_cache()
    +
    std::pair< std::vector< array >, ParentsMap > compile_dfs(const std::vector< array > &inputs, const std::vector< array > &outputs, const std::vector< array > &original_inputs)
    +
    std::vector< array > compile_replace(const std::vector< array > &tape, const std::vector< array > &trace_inputs, const std::vector< array > &trace_outputs, const std::vector< array > &inputs, bool shapeless)
    void compile_erase(std::uintptr_t fun_id)
    +
    std::unordered_map< std::uintptr_t, std::vector< std::pair< array, int > > > ParentsMap
    Definition compile_impl.h:33
    +
    std::pair< std::vector< array >, std::vector< array > > compile_trace(const std::function< std::vector< array >(const std::vector< array > &)> &fun, const std::vector< array > &inputs, bool shapeless)
    bool compile_available_for_device(const Device &device)
    std::function< std::vector< array >(const std::vector< array > &)> compile(std::function< std::vector< array >(const std::vector< array > &)> fun, std::uintptr_t fun_id, bool shapeless=false, std::vector< uint64_t > constants={})
    Definition device.h:7
    - - + + diff --git a/docs/build/html/compiled_8h.html b/docs/build/html/compiled_8h.html index 5727d9696..3a6183f83 100644 --- a/docs/build/html/compiled_8h.html +++ b/docs/build/html/compiled_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/compiled.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Namespaces | @@ -117,29 +131,32 @@ Functions   std::string mlx::core::get_type_string (Dtype d)   -template<typename T > +template<typename T> void mlx::core::print_float_constant (std::ostream &os, const array &x)   -template<typename T > +template<typename T> void mlx::core::print_int_constant (std::ostream &os, const array &x)   -template<typename T > +template<typename T> void mlx::core::print_complex_constant (std::ostream &os, const array &x)   void mlx::core::print_constant (std::ostream &os, const array &x)   bool mlx::core::is_scalar (const array &x)   -bool mlx::core::compiled_check_contiguity (const std::vector< array > &inputs, const std::vector< int > &shape) -  +bool mlx::core::compiled_check_contiguity (const std::vector< array > &inputs, const Shape &shape) +  void mlx::core::compiled_allocate_outputs (const std::vector< array > &inputs, std::vector< array > &outputs, const std::vector< array > &inputs_, const std::unordered_set< uintptr_t > &constant_ids_, bool contiguous, bool move_buffers=false)  
    - -
    + + diff --git a/docs/build/html/compiled_8h.js b/docs/build/html/compiled_8h.js new file mode 100644 index 000000000..b878f272f --- /dev/null +++ b/docs/build/html/compiled_8h.js @@ -0,0 +1,13 @@ +var compiled_8h = +[ + [ "mlx::core::build_lib_name", "namespacemlx_1_1core.html#a3ef23f334cb9f68a2c50524bc67c913b", null ], + [ "mlx::core::compiled_allocate_outputs", "namespacemlx_1_1core.html#ab8c3c4fc05745f586de922c8266f4fce", null ], + [ "mlx::core::compiled_check_contiguity", "namespacemlx_1_1core.html#a562040f4a03f2c0a5d50eb9c8f14a8be", null ], + [ "mlx::core::get_type_string", "namespacemlx_1_1core.html#af776fd91dd60594dcfebbafd17f19068", null ], + [ "mlx::core::is_scalar", "namespacemlx_1_1core.html#a985c60929757190e0b4ec51f57c767d0", null ], + [ "mlx::core::is_static_cast", "namespacemlx_1_1core.html#afd9e740e567f9d7c28e00113caf46d5f", null ], + [ "mlx::core::print_complex_constant", "namespacemlx_1_1core.html#a2b78f270942c6eb185e8045f1c5b4286", null ], + [ "mlx::core::print_constant", "namespacemlx_1_1core.html#a7d11b000895d44d183260634f4192d92", null ], + [ "mlx::core::print_float_constant", "namespacemlx_1_1core.html#a93a8ac59c644b801ec8881a58368caf2", null ], + [ "mlx::core::print_int_constant", "namespacemlx_1_1core.html#a948ce3dfc4520d3aa98b33e42f617c64", null ] +]; \ No newline at end of file diff --git a/docs/build/html/compiled_8h_source.html b/docs/build/html/compiled_8h_source.html index 4aefc49d2..58e7c69a3 100644 --- a/docs/build/html/compiled_8h_source.html +++ b/docs/build/html/compiled_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/compiled.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    compiled.h
    @@ -105,101 +119,101 @@ $(function(){ initResizable(false); });
    12
    13inline bool is_static_cast(const Primitive& p) {
    -
    14 return (
    -
    15 typeid(p) == typeid(Broadcast) || typeid(p) == typeid(Copy) ||
    -
    16 typeid(p) == typeid(StopGradient) || typeid(p) == typeid(AsType));
    -
    17}
    +
    14 return (typeid(p) == typeid(Broadcast) || typeid(p) == typeid(AsType));
    +
    15}
    -
    18
    -
    19std::string build_lib_name(
    -
    20 const std::vector<array>& inputs,
    -
    21 const std::vector<array>& outputs,
    -
    22 const std::vector<array>& tape,
    -
    23 const std::unordered_set<uintptr_t>& constant_ids);
    +
    16
    +
    17std::string build_lib_name(
    +
    18 const std::vector<array>& inputs,
    +
    19 const std::vector<array>& outputs,
    +
    20 const std::vector<array>& tape,
    +
    21 const std::unordered_set<uintptr_t>& constant_ids);
    +
    22
    +
    23std::string get_type_string(Dtype d);
    24
    -
    25std::string get_type_string(Dtype d);
    -
    26
    -
    27template <typename T>
    -
    -
    28void print_float_constant(std::ostream& os, const array& x) {
    -
    29 auto old_precision = os.precision();
    -
    30 os << std::setprecision(std::numeric_limits<float>::digits10 + 1)
    -
    31 << x.item<T>() << std::setprecision(old_precision);
    -
    32}
    +
    25template <typename T>
    +
    +
    26void print_float_constant(std::ostream& os, const array& x) {
    +
    27 auto old_precision = os.precision();
    +
    28 os << std::setprecision(std::numeric_limits<float>::digits10 + 1)
    +
    29 << x.item<T>() << std::setprecision(old_precision);
    +
    30}
    -
    33
    -
    34template <typename T>
    -
    -
    35void print_int_constant(std::ostream& os, const array& x) {
    -
    36 os << x.item<T>();
    -
    37}
    +
    31
    +
    32template <typename T>
    +
    +
    33void print_int_constant(std::ostream& os, const array& x) {
    +
    34 os << x.item<T>();
    +
    35}
    -
    38
    -
    39template <typename T>
    -
    -
    40void print_complex_constant(std::ostream& os, const array& x) {
    -
    41 auto old_precision = os.precision();
    -
    42 T constant = x.item<T>();
    -
    43
    -
    44 os << get_type_string(x.dtype()) << "("
    -
    45 << std::setprecision(std::numeric_limits<float>::digits10 + 1)
    -
    46 << constant.real() << ", " << constant.imag() << ")"
    -
    47 << std::setprecision(old_precision);
    -
    48}
    +
    36
    +
    37template <typename T>
    +
    +
    38void print_complex_constant(std::ostream& os, const array& x) {
    +
    39 auto old_precision = os.precision();
    +
    40 T constant = x.item<T>();
    +
    41
    +
    42 os << get_type_string(x.dtype()) << "("
    +
    43 << std::setprecision(std::numeric_limits<float>::digits10 + 1)
    +
    44 << constant.real() << ", " << constant.imag() << ")"
    +
    45 << std::setprecision(old_precision);
    +
    46}
    +
    47
    +
    48void print_constant(std::ostream& os, const array& x);
    49
    -
    50void print_constant(std::ostream& os, const array& x);
    -
    51
    -
    -
    52inline bool is_scalar(const array& x) {
    -
    53 return x.ndim() == 0;
    -
    54}
    +
    +
    50inline bool is_scalar(const array& x) {
    +
    51 return x.ndim() == 0;
    +
    52}
    -
    55
    -
    56// Check if we can use a contiguous operation given inputs and the output shape
    - -
    58 const std::vector<array>& inputs,
    -
    59 const std::vector<int>& shape);
    -
    60
    -
    61// Allocate space for the outputs possibly with input donation
    - -
    63 const std::vector<array>& inputs,
    -
    64 std::vector<array>& outputs,
    -
    65 const std::vector<array>& inputs_,
    -
    66 const std::unordered_set<uintptr_t>& constant_ids_,
    -
    67 bool contiguous,
    -
    68 bool move_buffers = false);
    -
    69
    -
    70} // namespace mlx::core
    +
    53
    +
    54// Check if we can use a contiguous operation given inputs and the output shape
    + +
    56 const std::vector<array>& inputs,
    +
    57 const Shape& shape);
    +
    58
    +
    59// Allocate space for the outputs possibly with input donation
    + +
    61 const std::vector<array>& inputs,
    +
    62 std::vector<array>& outputs,
    +
    63 const std::vector<array>& inputs_,
    +
    64 const std::unordered_set<uintptr_t>& constant_ids_,
    +
    65 bool contiguous,
    +
    66 bool move_buffers = false);
    +
    67
    +
    68} // namespace mlx::core
    -
    Definition primitives.h:417
    -
    Definition primitives.h:523
    -
    Definition primitives.h:697
    +
    Definition primitives.h:432
    +
    Definition primitives.h:575
    Definition primitives.h:48
    -
    Definition primitives.h:2029
    -
    Definition array.h:23
    -
    size_t ndim() const
    The number of dimensions of the array.
    Definition array.h:97
    -
    T item()
    Get the value from a scalar array.
    Definition array.h:538
    -
    Dtype dtype() const
    Get the arrays data type.
    Definition array.h:130
    +
    Definition array.h:24
    +
    size_t ndim() const
    The number of dimensions of the array.
    Definition array.h:98
    +
    T item()
    Get the value from a scalar array.
    Definition array.h:539
    +
    Dtype dtype() const
    Get the arrays data type.
    Definition array.h:131
    array contiguous(const array &a, bool allow_col_major=false, StreamOrDevice s={})
    Definition allocator.h:7
    -
    void print_complex_constant(std::ostream &os, const array &x)
    Definition compiled.h:40
    -
    bool compiled_check_contiguity(const std::vector< array > &inputs, const std::vector< int > &shape)
    +
    void print_complex_constant(std::ostream &os, const array &x)
    Definition compiled.h:38
    std::string build_lib_name(const std::vector< array > &inputs, const std::vector< array > &outputs, const std::vector< array > &tape, const std::unordered_set< uintptr_t > &constant_ids)
    +
    bool compiled_check_contiguity(const std::vector< array > &inputs, const Shape &shape)
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    void print_constant(std::ostream &os, const array &x)
    -
    void print_float_constant(std::ostream &os, const array &x)
    Definition compiled.h:28
    -
    void print_int_constant(std::ostream &os, const array &x)
    Definition compiled.h:35
    -
    bool is_scalar(const array &x)
    Definition compiled.h:52
    +
    void print_float_constant(std::ostream &os, const array &x)
    Definition compiled.h:26
    +
    void print_int_constant(std::ostream &os, const array &x)
    Definition compiled.h:33
    +
    bool is_scalar(const array &x)
    Definition compiled.h:50
    void compiled_allocate_outputs(const std::vector< array > &inputs, std::vector< array > &outputs, const std::vector< array > &inputs_, const std::unordered_set< uintptr_t > &constant_ids_, bool contiguous, bool move_buffers=false)
    std::string get_type_string(Dtype d)
    bool is_static_cast(const Primitive &p)
    Definition compiled.h:13
    Definition dtype.h:13
    - -
    + + diff --git a/docs/build/html/compiled__preamble_8h.html b/docs/build/html/compiled__preamble_8h.html index 93c2893ff..24fd6036a 100644 --- a/docs/build/html/compiled__preamble_8h.html +++ b/docs/build/html/compiled__preamble_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/compiled_preamble.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - +
    +
    + +
    +
    +
    - - + -
    @@ -123,10 +137,13 @@ Functions
    - - + + diff --git a/docs/build/html/compiled__preamble_8h.js b/docs/build/html/compiled__preamble_8h.js new file mode 100644 index 000000000..0fe70ae1e --- /dev/null +++ b/docs/build/html/compiled__preamble_8h.js @@ -0,0 +1,4 @@ +var compiled__preamble_8h = +[ + [ "get_kernel_preamble", "compiled__preamble_8h.html#a1dfa17a0369fb90ff615c7461f5013f3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/compiled__preamble_8h_source.html b/docs/build/html/compiled__preamble_8h_source.html index b881f142f..65506cdac 100644 --- a/docs/build/html/compiled__preamble_8h_source.html +++ b/docs/build/html/compiled__preamble_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common/compiled_preamble.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    compiled_preamble.h
    @@ -107,10 +121,13 @@ $(function(){ initResizable(false); });
    - - + + diff --git a/docs/build/html/conv_2loader_8h.html b/docs/build/html/conv_2loader_8h.html index 0a301c9be..110f8dc3b 100644 --- a/docs/build/html/conv_2loader_8h.html +++ b/docs/build/html/conv_2loader_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/loader.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    loader.h File Reference
    @@ -96,10 +110,13 @@ $(function(){ initResizable(false); });

    Go to the source code of this file.

    - - + + diff --git a/docs/build/html/conv_2loader_8h_source.html b/docs/build/html/conv_2loader_8h_source.html index 04e933bd7..11b173d56 100644 --- a/docs/build/html/conv_2loader_8h_source.html +++ b/docs/build/html/conv_2loader_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/loader.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    loader.h
    @@ -100,10 +114,13 @@ $(function(){ initResizable(false); });
    - - + + diff --git a/docs/build/html/conv_2params_8h.html b/docs/build/html/conv_2params_8h.html index 56c101352..2c281b6bd 100644 --- a/docs/build/html/conv_2params_8h.html +++ b/docs/build/html/conv_2params_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/params.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    Classes | @@ -116,10 +130,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/conv_2params_8h.js b/docs/build/html/conv_2params_8h.js new file mode 100644 index 000000000..774b9b73e --- /dev/null +++ b/docs/build/html/conv_2params_8h.js @@ -0,0 +1,7 @@ +var conv_2params_8h = +[ + [ "MLXConvParams< NDIM >", "struct_m_l_x_conv_params.html", "struct_m_l_x_conv_params" ], + [ "mlx::steel::ImplicitGemmConv2DParams", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params.html", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params" ], + [ "mlx::steel::Conv2DGeneralJumpParams", "structmlx_1_1steel_1_1_conv2_d_general_jump_params.html", "structmlx_1_1steel_1_1_conv2_d_general_jump_params" ], + [ "mlx::steel::Conv2DGeneralBaseInfo", "structmlx_1_1steel_1_1_conv2_d_general_base_info.html", "structmlx_1_1steel_1_1_conv2_d_general_base_info" ] +]; \ No newline at end of file diff --git a/docs/build/html/conv_2params_8h_source.html b/docs/build/html/conv_2params_8h_source.html index 566863a4c..1b62dc143 100644 --- a/docs/build/html/conv_2params_8h_source.html +++ b/docs/build/html/conv_2params_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/params.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - + -
    params.h
    @@ -108,9 +122,9 @@ $(function(){ initResizable(false); });
    14 const int pad[NDIM]; // Input padding
    15 const int kdil[NDIM]; // Kernel dilation
    16 const int idil[NDIM]; // Input dilation
    -
    17 const size_t in_strides[NDIM + 2]; // In strides
    -
    18 const size_t wt_strides[NDIM + 2]; // Wt strides
    -
    19 const size_t out_strides[NDIM + 2]; // Out strides
    +
    17 const int64_t in_strides[NDIM + 2]; // In strides
    +
    18 const int64_t wt_strides[NDIM + 2]; // Wt strides
    +
    19 const int64_t out_strides[NDIM + 2]; // Out strides
    20 const int groups; // Input channel groups
    21 const bool flip;
    22};
    @@ -164,16 +178,16 @@ $(function(){ initResizable(false); });
    Definition allocator.h:7
    Definition params.h:6
    const int C
    Definition params.h:8
    -
    const size_t out_strides[NDIM+2]
    Definition params.h:19
    const int oS[NDIM]
    Definition params.h:12
    const int iS[NDIM]
    Definition params.h:10
    const int kdil[NDIM]
    Definition params.h:15
    const int str[NDIM]
    Definition params.h:13
    -
    const size_t wt_strides[NDIM+2]
    Definition params.h:18
    const bool flip
    Definition params.h:21
    -
    const size_t in_strides[NDIM+2]
    Definition params.h:17
    +
    const int64_t in_strides[NDIM+2]
    Definition params.h:17
    +
    const int64_t wt_strides[NDIM+2]
    Definition params.h:18
    const int wS[NDIM]
    Definition params.h:11
    const int O
    Definition params.h:9
    +
    const int64_t out_strides[NDIM+2]
    Definition params.h:19
    const int N
    Definition params.h:7
    const int pad[NDIM]
    Definition params.h:14
    const int groups
    Definition params.h:20
    @@ -202,10 +216,13 @@ $(function(){ initResizable(false); });
    const int swizzle_log
    Definition params.h:40
    const int K
    Definition params.h:30
    - - + + diff --git a/docs/build/html/conv_8h.html b/docs/build/html/conv_8h.html index f35a8c3e4..edc2cb9cb 100644 --- a/docs/build/html/conv_8h.html +++ b/docs/build/html/conv_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/conv.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    conv.h File Reference
    @@ -99,10 +113,13 @@ $(function(){ initResizable(false); });

    Go to the source code of this file.

    - - + + diff --git a/docs/build/html/conv_8h_source.html b/docs/build/html/conv_8h_source.html index 17bfc4bcb..b629c0de9 100644 --- a/docs/build/html/conv_8h_source.html +++ b/docs/build/html/conv_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/conv.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    conv.h
    @@ -112,10 +126,13 @@ $(function(){ initResizable(false); });
    Definition attn.h:19
    - - + + diff --git a/docs/build/html/cpp/ops.html b/docs/build/html/cpp/ops.html index 15e999d3d..a0df60a46 100644 --- a/docs/build/html/cpp/ops.html +++ b/docs/build/html/cpp/ops.html @@ -8,7 +8,7 @@ - Operations — MLX 0.21.1 documentation + Operations — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    Using MLX in C++

    + +
    +
    + +
    +
    +
    + + + + +
    + +
    +

    Using MLX in C++#

    +

    You can use MLX in a C++ project with CMake.

    +
    +

    Note

    +

    This guide is based one the following example using MLX in C++

    +
    +

    First install MLX:

    +
    pip install -U mlx
    +
    +
    +

    You can also install the MLX Python package from source or just the C++ +library. For more information see the documentation on installing MLX.

    +

    Next make an example program in example.cpp:

    +
    #include <iostream>
    +
    +#include "mlx/mlx.h"
    +
    +namespace mx = mlx::core;
    +
    +int main() {
    +  auto x = mx::array({1, 2, 3});
    +  auto y = mx::array({1, 2, 3});
    +  std::cout << x + y << std::endl;
    +  return 0;
    +}
    +
    +
    +

    The next step is to setup a CMake file in CMakeLists.txt:

    +
    cmake_minimum_required(VERSION 3.27)
    +
    +project(example LANGUAGES CXX)
    +
    +set(CMAKE_CXX_STANDARD 17)
    +set(CMAKE_CXX_STANDARD_REQUIRED ON)
    +
    +
    +

    Depending on how you installed MLX, you may need to tell CMake where to +find it.

    +

    If you installed MLX with Python, then add the following to the CMake file:

    +
    find_package(
    +  Python 3.9
    +  COMPONENTS Interpreter Development.Module
    +  REQUIRED)
    +execute_process(
    +  COMMAND "${Python_EXECUTABLE}" -m mlx --cmake-dir
    +  OUTPUT_STRIP_TRAILING_WHITESPACE
    +  OUTPUT_VARIABLE MLX_ROOT)
    +
    +
    +

    If you installed the MLX C++ package to a system path, then CMake should be +able to find it. If you installed it to a non-standard location or CMake can’t +find MLX then set MLX_ROOT to the location where MLX is installed:

    +
    set(MLX_ROOT "/path/to/mlx/")
    +
    +
    +

    Next, instruct CMake to find MLX:

    +
    find_package(MLX CONFIG REQUIRED)
    +
    +
    +

    Finally, add the example.cpp program as an executable and link MLX.

    +
    add_executable(example example.cpp)
    +target_link_libraries(example PRIVATE mlx)
    +
    +
    +

    You can build the example with:

    +
    cmake -B build -DCMAKE_BUILD_TYPE=Release
    +cmake --build build
    +
    +
    +

    And run it with:

    +
    ./build/example
    +
    +
    +

    Note find_package(MLX CONFIG REQUIRED) sets the following variables:

    +
    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    Package Variables#

    Variable

    Description

    MLX_FOUND

    True if MLX is found

    MLX_INCLUDE_DIRS

    Include directory

    MLX_LIBRARIES

    Libraries to link against

    MLX_CXX_FLAGS

    Additional compiler flags

    MLX_BUILD_ACCELERATE

    True if MLX was built with Accelerate

    MLX_BUILD_METAL

    True if MLX was built with Metal

    +
    +
    + + +
    + + + + + + + + +
    + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/device_8h.html b/docs/build/html/device_8h.html index 60956820b..3a46626d0 100644 --- a/docs/build/html/device_8h.html +++ b/docs/build/html/device_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/device.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -122,10 +136,13 @@ Functions  
    - -
    + + diff --git a/docs/build/html/device_8h.js b/docs/build/html/device_8h.js new file mode 100644 index 000000000..2e932797e --- /dev/null +++ b/docs/build/html/device_8h.js @@ -0,0 +1,8 @@ +var device_8h = +[ + [ "mlx::core::Device", "structmlx_1_1core_1_1_device.html", "structmlx_1_1core_1_1_device" ], + [ "mlx::core::default_device", "namespacemlx_1_1core.html#a0196171cfe6ee2953113abce597dc815", null ], + [ "mlx::core::operator!=", "namespacemlx_1_1core.html#a94d00a1b7f8a4717ab3f26f45e4da655", null ], + [ "mlx::core::operator==", "namespacemlx_1_1core.html#a937503d72b66c661bf3f5fdcd98ef97c", null ], + [ "mlx::core::set_default_device", "namespacemlx_1_1core.html#a312a2de41367fe52caeaf8c0f596a120", null ] +]; \ No newline at end of file diff --git a/docs/build/html/device_8h_source.html b/docs/build/html/device_8h_source.html index e3bc9b5e5..8fec62d78 100644 --- a/docs/build/html/device_8h_source.html +++ b/docs/build/html/device_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/device.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    device.h
    @@ -98,11 +112,11 @@ $(function(){ initResizable(false); });
    5namespace mlx::core {
    6
    -
    7struct Device {
    +
    7struct Device {
    8 enum class DeviceType {
    -
    9 cpu,
    -
    10 gpu,
    + +
    11 };
    12
    @@ -136,13 +150,16 @@ $(function(){ initResizable(false); });
    static constexpr DeviceType cpu
    Definition device.h:13
    DeviceType type
    Definition device.h:18
    DeviceType
    Definition device.h:8
    - - +
    @ gpu
    Definition device.h:10
    +
    @ cpu
    Definition device.h:9
    - - + + diff --git a/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.html b/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.html index b300de4aa..e1a5541a9 100644 --- a/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.html +++ b/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/utils Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    utils Directory Reference
    @@ -100,10 +114,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.js b/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.js new file mode 100644 index 000000000..65f3d6fc6 --- /dev/null +++ b/docs/build/html/dir_1b634d20b746ceaa770a5379eca5f24a.js @@ -0,0 +1,5 @@ +var dir_1b634d20b746ceaa770a5379eca5f24a = +[ + [ "integral_constant.h", "integral__constant_8h.html", "integral__constant_8h" ], + [ "type_traits.h", "type__traits_8h.html", "type__traits_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.html b/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.html index d80e3a550..8f560e520 100644 --- a/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.html +++ b/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    backend Directory Reference
    @@ -102,10 +116,13 @@ Directories  
    - - + + diff --git a/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.js b/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.js new file mode 100644 index 000000000..c2e31f62c --- /dev/null +++ b/docs/build/html/dir_1d446c9bd3c99228254c9484e0bc5c06.js @@ -0,0 +1,6 @@ +var dir_1d446c9bd3c99228254c9484e0bc5c06 = +[ + [ "accelerate", "dir_86b95e7b1d0d6e25466bb9213752d32f.html", "dir_86b95e7b1d0d6e25466bb9213752d32f" ], + [ "common", "dir_f149b24a1b5be11cd70151abe517e3f8.html", "dir_f149b24a1b5be11cd70151abe517e3f8" ], + [ "metal", "dir_d0c977ea65824390717cdb7efc36c157.html", "dir_d0c977ea65824390717cdb7efc36c157" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.html b/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.html index 1befe9070..50b81a010 100644 --- a/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.html +++ b/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.html @@ -3,7 +3,7 @@ - + MLX: mlx/io Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    io Directory Reference
    @@ -102,10 +116,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.js b/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.js new file mode 100644 index 000000000..26436dc71 --- /dev/null +++ b/docs/build/html/dir_2193406f5b2eae6fc53753d8a9a80df3.js @@ -0,0 +1,6 @@ +var dir_2193406f5b2eae6fc53753d8a9a80df3 = +[ + [ "gguf.h", "gguf_8h.html", "gguf_8h" ], + [ "load.h", "io_2load_8h.html", "io_2load_8h" ], + [ "threadpool.h", "threadpool_8h.html", "threadpool_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.html b/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.html index 561e7f3c0..07d00541c 100644 --- a/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.html +++ b/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    distributed Directory Reference
    + + + +

    +Directories

     mpi
     
    @@ -104,10 +123,13 @@ Files

    Files

     distributed.h
     
    - -
    + + diff --git a/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.js b/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.js new file mode 100644 index 000000000..bb9618229 --- /dev/null +++ b/docs/build/html/dir_23833761034051b43bb6c170b56e2cce.js @@ -0,0 +1,8 @@ +var dir_23833761034051b43bb6c170b56e2cce = +[ + [ "mpi", "dir_fef8157d08ab8bc47d26a7b4e218df82.html", "dir_fef8157d08ab8bc47d26a7b4e218df82" ], + [ "distributed.h", "distributed_8h.html", "distributed_8h" ], + [ "distributed_impl.h", "distributed__impl_8h.html", "distributed__impl_8h" ], + [ "ops.h", "distributed_2ops_8h.html", "distributed_2ops_8h" ], + [ "primitives.h", "distributed_2primitives_8h.html", "distributed_2primitives_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_4336740ec0075891704443b417fef6cb.html b/docs/build/html/dir_4336740ec0075891704443b417fef6cb.html index a0d00e4f7..701d9ce0e 100644 --- a/docs/build/html/dir_4336740ec0075891704443b417fef6cb.html +++ b/docs/build/html/dir_4336740ec0075891704443b417fef6cb.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/jit Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    jit Directory Reference
    @@ -110,10 +124,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_4336740ec0075891704443b417fef6cb.js b/docs/build/html/dir_4336740ec0075891704443b417fef6cb.js new file mode 100644 index 000000000..5d4f6c38e --- /dev/null +++ b/docs/build/html/dir_4336740ec0075891704443b417fef6cb.js @@ -0,0 +1,10 @@ +var dir_4336740ec0075891704443b417fef6cb = +[ + [ "arange.h", "metal_2jit_2arange_8h.html", "metal_2jit_2arange_8h" ], + [ "gemv_masked.h", "jit_2gemv__masked_8h.html", "jit_2gemv__masked_8h" ], + [ "includes.h", "includes_8h.html", "includes_8h" ], + [ "indexing.h", "jit_2indexing_8h.html", "jit_2indexing_8h" ], + [ "softmax.h", "jit_2softmax_8h.html", "jit_2softmax_8h" ], + [ "steel_conv.h", "jit_2steel__conv_8h.html", "jit_2steel__conv_8h" ], + [ "steel_gemm.h", "steel__gemm_8h.html", "steel__gemm_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.html b/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.html index 81b417dd4..9cff1d301 100644 --- a/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.html +++ b/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.html @@ -3,7 +3,7 @@ - + MLX: mlx/types Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    types Directory Reference
    @@ -102,12 +116,17 @@ Files    half_types.h   + limits.h
    - - + + diff --git a/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.js b/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.js new file mode 100644 index 000000000..bef4f585e --- /dev/null +++ b/docs/build/html/dir_47795aa8999234f6f402f7e89d34d08e.js @@ -0,0 +1,8 @@ +var dir_47795aa8999234f6f402f7e89d34d08e = +[ + [ "bf16.h", "types_2bf16_8h.html", "types_2bf16_8h" ], + [ "complex.h", "types_2complex_8h.html", "types_2complex_8h" ], + [ "fp16.h", "fp16_8h.html", "fp16_8h" ], + [ "half_types.h", "half__types_8h.html", "half__types_8h" ], + [ "limits.h", "limits_8h.html", "limits_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.html b/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.html index 2001241f8..fc2e82639 100644 --- a/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.html +++ b/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn/kernels Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    kernels Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.js b/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.js new file mode 100644 index 000000000..a53f6cade --- /dev/null +++ b/docs/build/html/dir_5aea41cce495e77a0857a0aecf063e33.js @@ -0,0 +1,4 @@ +var dir_5aea41cce495e77a0857a0aecf063e33 = +[ + [ "steel_attention.h", "steel__attention_8h.html", "steel__attention_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.html b/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.html index 5ce22a367..ea38082d9 100644 --- a/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.html +++ b/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/kernels Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    kernels Directory Reference
    @@ -100,10 +114,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.js b/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.js new file mode 100644 index 000000000..dc7b683be --- /dev/null +++ b/docs/build/html/dir_6379e541ea5051a09bc0e3fdd92fcd3b.js @@ -0,0 +1,5 @@ +var dir_6379e541ea5051a09bc0e3fdd92fcd3b = +[ + [ "steel_conv.h", "kernels_2steel_2conv_2kernels_2steel__conv_8h.html", "kernels_2steel_2conv_2kernels_2steel__conv_8h" ], + [ "steel_conv_general.h", "steel__conv__general_8h.html", "steel__conv__general_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.html b/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.html index 4bc85b3b1..f822c6103 100644 --- a/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.html +++ b/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/gemm Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    gemm Directory Reference
    @@ -111,10 +125,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.js b/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.js new file mode 100644 index 000000000..8c4107be1 --- /dev/null +++ b/docs/build/html/dir_6768c99e6145fb9510ccdb40db8ede25.js @@ -0,0 +1,9 @@ +var dir_6768c99e6145fb9510ccdb40db8ede25 = +[ + [ "kernels", "dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html", "dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9" ], + [ "gemm.h", "gemm_8h.html", "gemm_8h" ], + [ "loader.h", "gemm_2loader_8h.html", "gemm_2loader_8h" ], + [ "mma.h", "gemm_2mma_8h.html", "gemm_2mma_8h" ], + [ "params.h", "gemm_2params_8h.html", "gemm_2params_8h" ], + [ "transforms.h", "backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html", "backend_2metal_2kernels_2steel_2gemm_2transforms_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.html b/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.html index e88fa7636..1d7e62a2a 100644 --- a/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.html +++ b/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    kernels Directory Reference
    @@ -169,10 +183,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.js b/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.js new file mode 100644 index 000000000..b3d41f38e --- /dev/null +++ b/docs/build/html/dir_70a37effa88bcbd6b791977fa1e64356.js @@ -0,0 +1,38 @@ +var dir_70a37effa88bcbd6b791977fa1e64356 = +[ + [ "fft", "dir_8c751ccfa9f494753d976761a9d60a84.html", "dir_8c751ccfa9f494753d976761a9d60a84" ], + [ "jit", "dir_fb5e52e7ad5a84a63db2993d12f7610c.html", "dir_fb5e52e7ad5a84a63db2993d12f7610c" ], + [ "metal_3_0", "dir_d36f9e79442ec4bd53287b83bdefe7e5.html", "dir_d36f9e79442ec4bd53287b83bdefe7e5" ], + [ "metal_3_1", "dir_83367edb60e23ad59b1a493d8c883287.html", "dir_83367edb60e23ad59b1a493d8c883287" ], + [ "reduction", "dir_f60cd69d27fd3faa641c79056fff0e2d.html", "dir_f60cd69d27fd3faa641c79056fff0e2d" ], + [ "steel", "dir_76215a6c54e2b67053e723fc2395583c.html", "dir_76215a6c54e2b67053e723fc2395583c" ], + [ "arange.h", "metal_2kernels_2arange_8h.html", "metal_2kernels_2arange_8h" ], + [ "atomic.h", "atomic_8h.html", "atomic_8h" ], + [ "bf16_math.h", "bf16__math_8h.html", "bf16__math_8h" ], + [ "binary.h", "metal_2kernels_2binary_8h.html", "metal_2kernels_2binary_8h" ], + [ "binary_ops.h", "binary__ops_8h.html", "binary__ops_8h" ], + [ "binary_two.h", "metal_2kernels_2binary__two_8h.html", "metal_2kernels_2binary__two_8h" ], + [ "complex.h", "backend_2metal_2kernels_2complex_8h.html", "backend_2metal_2kernels_2complex_8h" ], + [ "copy.h", "metal_2kernels_2copy_8h.html", "metal_2kernels_2copy_8h" ], + [ "defines.h", "defines_8h.html", "defines_8h" ], + [ "erf.h", "erf_8h.html", "erf_8h" ], + [ "expm1f.h", "expm1f_8h.html", "expm1f_8h" ], + [ "fft.h", "backend_2metal_2kernels_2fft_8h.html", "backend_2metal_2kernels_2fft_8h" ], + [ "gather.h", "gather_8h.html", "gather_8h" ], + [ "gemv_masked.h", "kernels_2gemv__masked_8h.html", "kernels_2gemv__masked_8h" ], + [ "hadamard.h", "metal_2kernels_2hadamard_8h.html", "metal_2kernels_2hadamard_8h" ], + [ "indexing.h", "kernels_2indexing_8h.html", "kernels_2indexing_8h" ], + [ "quantized.h", "quantized_8h.html", "quantized_8h" ], + [ "reduce.h", "metal_2kernels_2reduce_8h.html", null ], + [ "reduce_utils.h", "reduce__utils_8h.html", null ], + [ "scan.h", "scan_8h.html", "scan_8h" ], + [ "scatter.h", "scatter_8h.html", "scatter_8h" ], + [ "sdpa_vector.h", "sdpa__vector_8h.html", "sdpa__vector_8h" ], + [ "softmax.h", "kernels_2softmax_8h.html", "kernels_2softmax_8h" ], + [ "sort.h", "sort_8h.html", "sort_8h" ], + [ "ternary.h", "metal_2kernels_2ternary_8h.html", "metal_2kernels_2ternary_8h" ], + [ "ternary_ops.h", "ternary__ops_8h.html", "ternary__ops_8h" ], + [ "unary.h", "metal_2kernels_2unary_8h.html", "metal_2kernels_2unary_8h" ], + [ "unary_ops.h", "unary__ops_8h.html", "unary__ops_8h" ], + [ "utils.h", "backend_2metal_2kernels_2utils_8h.html", "backend_2metal_2kernels_2utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.html b/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.html index 374387cf7..f5c192282 100644 --- a/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.html +++ b/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    steel Directory Reference
    @@ -111,10 +125,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.js b/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.js new file mode 100644 index 000000000..580c9370f --- /dev/null +++ b/docs/build/html/dir_76215a6c54e2b67053e723fc2395583c.js @@ -0,0 +1,9 @@ +var dir_76215a6c54e2b67053e723fc2395583c = +[ + [ "attn", "dir_e1756c7634b0c14aead026895ad71c6d.html", "dir_e1756c7634b0c14aead026895ad71c6d" ], + [ "conv", "dir_df9494e83ef22ae6150a0e080d9709ed.html", "dir_df9494e83ef22ae6150a0e080d9709ed" ], + [ "gemm", "dir_6768c99e6145fb9510ccdb40db8ede25.html", "dir_6768c99e6145fb9510ccdb40db8ede25" ], + [ "utils", "dir_1b634d20b746ceaa770a5379eca5f24a.html", "dir_1b634d20b746ceaa770a5379eca5f24a" ], + [ "defines.h", "steel_2defines_8h.html", "steel_2defines_8h" ], + [ "utils.h", "backend_2metal_2kernels_2steel_2utils_8h.html", "backend_2metal_2kernels_2steel_2utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.html b/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.html index 7383c68c1..164095ae5 100644 --- a/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.html +++ b/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_1 Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    metal_3_1 Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.js b/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.js new file mode 100644 index 000000000..bc4c0c67c --- /dev/null +++ b/docs/build/html/dir_83367edb60e23ad59b1a493d8c883287.js @@ -0,0 +1,4 @@ +var dir_83367edb60e23ad59b1a493d8c883287 = +[ + [ "bf16.h", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html", "backend_2metal_2kernels_2metal__3__1_2bf16_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.html b/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.html index e60fdf90a..7dc8ef549 100644 --- a/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.html +++ b/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/accelerate Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    accelerate Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.js b/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.js new file mode 100644 index 000000000..3c5887690 --- /dev/null +++ b/docs/build/html/dir_86b95e7b1d0d6e25466bb9213752d32f.js @@ -0,0 +1,4 @@ +var dir_86b95e7b1d0d6e25466bb9213752d32f = +[ + [ "utils.h", "backend_2accelerate_2utils_8h.html", "backend_2accelerate_2utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.html b/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.html index a5ca17b33..66c51e6fe 100644 --- a/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.html +++ b/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/fft Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    fft Directory Reference
    @@ -100,10 +114,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.js b/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.js new file mode 100644 index 000000000..e57bddec9 --- /dev/null +++ b/docs/build/html/dir_8c751ccfa9f494753d976761a9d60a84.js @@ -0,0 +1,5 @@ +var dir_8c751ccfa9f494753d976761a9d60a84 = +[ + [ "radix.h", "radix_8h.html", "radix_8h" ], + [ "readwrite.h", "readwrite_8h.html", "readwrite_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.html b/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.html index 59395b131..5c5edf41f 100644 --- a/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.html +++ b/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.html @@ -3,7 +3,7 @@ - + MLX: mlx Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    mlx Directory Reference
    @@ -123,6 +137,10 @@ Files    event.h   + export.h +  + export_impl.h fast.h    fast_primitives.h @@ -155,10 +173,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.js b/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.js new file mode 100644 index 000000000..e6808f5bd --- /dev/null +++ b/docs/build/html/dir_938ab0ecf10b8b860ff766c820f665fd.js @@ -0,0 +1,33 @@ +var dir_938ab0ecf10b8b860ff766c820f665fd = +[ + [ "3rdparty", "dir_ad00dcd1517bfdbe01f68ec9b4eff877.html", "dir_ad00dcd1517bfdbe01f68ec9b4eff877" ], + [ "backend", "dir_1d446c9bd3c99228254c9484e0bc5c06.html", "dir_1d446c9bd3c99228254c9484e0bc5c06" ], + [ "distributed", "dir_23833761034051b43bb6c170b56e2cce.html", "dir_23833761034051b43bb6c170b56e2cce" ], + [ "io", "dir_2193406f5b2eae6fc53753d8a9a80df3.html", "dir_2193406f5b2eae6fc53753d8a9a80df3" ], + [ "types", "dir_47795aa8999234f6f402f7e89d34d08e.html", "dir_47795aa8999234f6f402f7e89d34d08e" ], + [ "allocator.h", "allocator_8h.html", "allocator_8h" ], + [ "array.h", "array_8h.html", "array_8h" ], + [ "compile.h", "compile_8h.html", "compile_8h" ], + [ "compile_impl.h", "compile__impl_8h.html", "compile__impl_8h" ], + [ "device.h", "device_8h.html", "device_8h" ], + [ "dtype.h", "dtype_8h.html", "dtype_8h" ], + [ "einsum.h", "einsum_8h.html", "einsum_8h" ], + [ "event.h", "event_8h.html", "event_8h" ], + [ "export.h", "export_8h.html", "export_8h" ], + [ "export_impl.h", "export__impl_8h.html", "export__impl_8h" ], + [ "fast.h", "fast_8h.html", "fast_8h" ], + [ "fast_primitives.h", "fast__primitives_8h.html", "fast__primitives_8h" ], + [ "fft.h", "fft_8h.html", "fft_8h" ], + [ "graph_utils.h", "graph__utils_8h.html", "graph__utils_8h" ], + [ "io.h", "io_8h.html", "io_8h" ], + [ "linalg.h", "linalg_8h.html", "linalg_8h" ], + [ "mlx.h", "mlx_8h.html", null ], + [ "ops.h", "ops_8h.html", "ops_8h" ], + [ "primitives.h", "primitives_8h.html", "primitives_8h" ], + [ "random.h", "random_8h.html", "random_8h" ], + [ "scheduler.h", "scheduler_8h.html", "scheduler_8h" ], + [ "stream.h", "stream_8h.html", "stream_8h" ], + [ "transforms.h", "transforms_8h.html", "transforms_8h" ], + [ "transforms_impl.h", "transforms__impl_8h.html", "transforms__impl_8h" ], + [ "utils.h", "utils_8h.html", "utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html b/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html index e3923bc5d..bd2c5c043 100644 --- a/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html +++ b/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/gemm/kernels Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    kernels Directory Reference
    @@ -102,10 +116,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.js b/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.js new file mode 100644 index 000000000..5fc3e693e --- /dev/null +++ b/docs/build/html/dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9.js @@ -0,0 +1,6 @@ +var dir_9c555e3d0f5b8c3fb3a7397c81fd5bf9 = +[ + [ "steel_gemm_fused.h", "steel__gemm__fused_8h.html", "steel__gemm__fused_8h" ], + [ "steel_gemm_masked.h", "steel__gemm__masked_8h.html", "steel__gemm__masked_8h" ], + [ "steel_gemm_splitk.h", "steel__gemm__splitk_8h.html", "steel__gemm__splitk_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.html b/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.html index 68c2d584d..bf98e739d 100644 --- a/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.html +++ b/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.html @@ -3,7 +3,7 @@ - + MLX: mlx/3rdparty Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    3rdparty Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.js b/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.js new file mode 100644 index 000000000..c6b08d0c9 --- /dev/null +++ b/docs/build/html/dir_ad00dcd1517bfdbe01f68ec9b4eff877.js @@ -0,0 +1,4 @@ +var dir_ad00dcd1517bfdbe01f68ec9b4eff877 = +[ + [ "pocketfft.h", "pocketfft_8h.html", "pocketfft_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.html b/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.html index 496ac9d2a..87ff20338 100644 --- a/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.html +++ b/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv/loaders Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    loaders Directory Reference
    @@ -102,10 +116,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.js b/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.js new file mode 100644 index 000000000..0f50aa486 --- /dev/null +++ b/docs/build/html/dir_ba4426224ef60f409462a2a12fa18f06.js @@ -0,0 +1,6 @@ +var dir_ba4426224ef60f409462a2a12fa18f06 = +[ + [ "loader_channel_l.h", "loader__channel__l_8h.html", "loader__channel__l_8h" ], + [ "loader_channel_n.h", "loader__channel__n_8h.html", "loader__channel__n_8h" ], + [ "loader_general.h", "loader__general_8h.html", "loader__general_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.html b/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.html index 32ed888af..408d6356e 100644 --- a/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.html +++ b/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    metal Directory Reference
    @@ -131,10 +145,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.js b/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.js new file mode 100644 index 000000000..c47037736 --- /dev/null +++ b/docs/build/html/dir_d0c977ea65824390717cdb7efc36c157.js @@ -0,0 +1,19 @@ +var dir_d0c977ea65824390717cdb7efc36c157 = +[ + [ "jit", "dir_4336740ec0075891704443b417fef6cb.html", "dir_4336740ec0075891704443b417fef6cb" ], + [ "kernels", "dir_70a37effa88bcbd6b791977fa1e64356.html", "dir_70a37effa88bcbd6b791977fa1e64356" ], + [ "allocator.h", "backend_2metal_2allocator_8h.html", "backend_2metal_2allocator_8h" ], + [ "binary.h", "metal_2binary_8h.html", "metal_2binary_8h" ], + [ "copy.h", "metal_2copy_8h.html", "metal_2copy_8h" ], + [ "device.h", "backend_2metal_2device_8h.html", "backend_2metal_2device_8h" ], + [ "kernels.h", "kernels_8h.html", "kernels_8h" ], + [ "matmul.h", "matmul_8h.html", "matmul_8h" ], + [ "metal.h", "metal_8h.html", "metal_8h" ], + [ "metal_impl.h", "metal__impl_8h.html", "metal__impl_8h" ], + [ "reduce.h", "metal_2reduce_8h.html", "metal_2reduce_8h" ], + [ "resident.h", "resident_8h.html", "resident_8h" ], + [ "slicing.h", "metal_2slicing_8h.html", "metal_2slicing_8h" ], + [ "ternary.h", "metal_2ternary_8h.html", "metal_2ternary_8h" ], + [ "unary.h", "metal_2unary_8h.html", "metal_2unary_8h" ], + [ "utils.h", "backend_2metal_2utils_8h.html", "backend_2metal_2utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.html b/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.html index bd8458eac..54f52ae6a 100644 --- a/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.html +++ b/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/metal_3_0 Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    metal_3_0 Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.js b/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.js new file mode 100644 index 000000000..af89488af --- /dev/null +++ b/docs/build/html/dir_d36f9e79442ec4bd53287b83bdefe7e5.js @@ -0,0 +1,4 @@ +var dir_d36f9e79442ec4bd53287b83bdefe7e5 = +[ + [ "bf16.h", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html", "backend_2metal_2kernels_2metal__3__0_2bf16_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.html b/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.html index e1c4e659d..aac95378f 100644 --- a/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.html +++ b/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/conv Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    conv Directory Reference
    @@ -109,10 +123,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.js b/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.js new file mode 100644 index 000000000..2cd405cdf --- /dev/null +++ b/docs/build/html/dir_df9494e83ef22ae6150a0e080d9709ed.js @@ -0,0 +1,8 @@ +var dir_df9494e83ef22ae6150a0e080d9709ed = +[ + [ "kernels", "dir_6379e541ea5051a09bc0e3fdd92fcd3b.html", "dir_6379e541ea5051a09bc0e3fdd92fcd3b" ], + [ "loaders", "dir_ba4426224ef60f409462a2a12fa18f06.html", "dir_ba4426224ef60f409462a2a12fa18f06" ], + [ "conv.h", "conv_8h.html", null ], + [ "loader.h", "conv_2loader_8h.html", null ], + [ "params.h", "conv_2params_8h.html", "conv_2params_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.html b/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.html index 904ba2fa9..72fa53274 100644 --- a/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.html +++ b/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/steel/attn Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    attn Directory Reference
    @@ -111,10 +125,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.js b/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.js new file mode 100644 index 000000000..f202182c9 --- /dev/null +++ b/docs/build/html/dir_e1756c7634b0c14aead026895ad71c6d.js @@ -0,0 +1,9 @@ +var dir_e1756c7634b0c14aead026895ad71c6d = +[ + [ "kernels", "dir_5aea41cce495e77a0857a0aecf063e33.html", "dir_5aea41cce495e77a0857a0aecf063e33" ], + [ "attn.h", "attn_8h.html", "attn_8h" ], + [ "loader.h", "attn_2loader_8h.html", "attn_2loader_8h" ], + [ "mma.h", "attn_2mma_8h.html", "attn_2mma_8h" ], + [ "params.h", "attn_2params_8h.html", "attn_2params_8h" ], + [ "transforms.h", "backend_2metal_2kernels_2steel_2attn_2transforms_8h.html", "backend_2metal_2kernels_2steel_2attn_2transforms_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.html b/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.html index e4948d404..2cc5f1e86 100644 --- a/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.html +++ b/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/common Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    common Directory Reference
    @@ -108,6 +122,8 @@ Files    hadamard.h   + jit_compiler.h lapack.h    load.h @@ -128,10 +144,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.js b/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.js new file mode 100644 index 000000000..6b86af116 --- /dev/null +++ b/docs/build/html/dir_f149b24a1b5be11cd70151abe517e3f8.js @@ -0,0 +1,20 @@ +var dir_f149b24a1b5be11cd70151abe517e3f8 = +[ + [ "arange.h", "common_2arange_8h.html", "common_2arange_8h" ], + [ "binary.h", "common_2binary_8h.html", null ], + [ "binary_two.h", "common_2binary__two_8h.html", null ], + [ "compiled.h", "compiled_8h.html", "compiled_8h" ], + [ "compiled_preamble.h", "compiled__preamble_8h.html", "compiled__preamble_8h" ], + [ "copy.h", "common_2copy_8h.html", "common_2copy_8h" ], + [ "hadamard.h", "common_2hadamard_8h.html", "common_2hadamard_8h" ], + [ "jit_compiler.h", "jit__compiler_8h.html", "jit__compiler_8h" ], + [ "lapack.h", "lapack_8h.html", "lapack_8h" ], + [ "load.h", "backend_2common_2load_8h.html", "backend_2common_2load_8h" ], + [ "ops.h", "backend_2common_2ops_8h.html", "backend_2common_2ops_8h" ], + [ "reduce.h", "common_2reduce_8h.html", "common_2reduce_8h" ], + [ "slicing.h", "common_2slicing_8h.html", "common_2slicing_8h" ], + [ "ternary.h", "common_2ternary_8h.html", null ], + [ "threefry.h", "threefry_8h.html", "threefry_8h" ], + [ "unary.h", "common_2unary_8h.html", null ], + [ "utils.h", "backend_2common_2utils_8h.html", "backend_2common_2utils_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.html b/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.html index 1a5121a59..7e49ceb8f 100644 --- a/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.html +++ b/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/reduction Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    reduction Directory Reference
    @@ -106,10 +120,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.js b/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.js new file mode 100644 index 000000000..b49f081f2 --- /dev/null +++ b/docs/build/html/dir_f60cd69d27fd3faa641c79056fff0e2d.js @@ -0,0 +1,8 @@ +var dir_f60cd69d27fd3faa641c79056fff0e2d = +[ + [ "ops.h", "backend_2metal_2kernels_2reduction_2ops_8h.html", "backend_2metal_2kernels_2reduction_2ops_8h" ], + [ "reduce_all.h", "reduce__all_8h.html", "reduce__all_8h" ], + [ "reduce_col.h", "reduce__col_8h.html", "reduce__col_8h" ], + [ "reduce_init.h", "reduce__init_8h.html", "reduce__init_8h" ], + [ "reduce_row.h", "reduce__row_8h.html", "reduce__row_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.html b/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.html index 000f91aaa..028bdbcfd 100644 --- a/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.html +++ b/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/jit Directory Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    jit Directory Reference
    @@ -98,10 +112,13 @@ Files  
    - - + + diff --git a/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.js b/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.js new file mode 100644 index 000000000..1ffdab695 --- /dev/null +++ b/docs/build/html/dir_fb5e52e7ad5a84a63db2993d12f7610c.js @@ -0,0 +1,4 @@ +var dir_fb5e52e7ad5a84a63db2993d12f7610c = +[ + [ "bf16.h", "backend_2metal_2kernels_2jit_2bf16_8h.html", "backend_2metal_2kernels_2jit_2bf16_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html b/docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.html similarity index 55% rename from docs/build/html/struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html rename to docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.html index 95c862187..4788dcba4 100644 --- a/docs/build/html/struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html +++ b/docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.html @@ -3,19 +3,26 @@ - + -MLX: ConditionalType< true, T, U > Struct Template Reference +MLX: mlx/distributed/mpi Directory Reference + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    -
    -
    - -
    ConditionalType< true, T, U > Struct Template Reference
    +
    mpi Directory Reference
    - -

    #include <utils.h>

    - - - + + +

    -Public Types

    using type = T
     

    +Files

     mpi.h
     
    -

    Member Typedef Documentation

    - -

    ◆ type

    - -
    -
    -
    -template<typename T , typename U >
    - - - - -
    using ConditionalType< true, T, U >::type = T
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file:
      -
    • mlx/backend/metal/kernels/utils.h
    • -
    - -
    + + diff --git a/docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.js b/docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.js new file mode 100644 index 000000000..1e70f0e2f --- /dev/null +++ b/docs/build/html/dir_fef8157d08ab8bc47d26a7b4e218df82.js @@ -0,0 +1,4 @@ +var dir_fef8157d08ab8bc47d26a7b4e218df82 = +[ + [ "mpi.h", "mpi_8h.html", "mpi_8h" ] +]; \ No newline at end of file diff --git a/docs/build/html/distributed_2ops_8h.html b/docs/build/html/distributed_2ops_8h.html index 08f08074b..85f86f1a9 100644 --- a/docs/build/html/distributed_2ops_8h.html +++ b/docs/build/html/distributed_2ops_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/ops.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Namespaces | @@ -117,16 +131,19 @@ Functions   array mlx::core::distributed::send (const array &x, int dst, std::optional< Group > group=std::nullopt, StreamOrDevice s={})   -array mlx::core::distributed::recv (std::vector< int > shape, Dtype dtype, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={}) -  +array mlx::core::distributed::recv (Shape shape, Dtype dtype, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={}) +  array mlx::core::distributed::recv_like (const array &x, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={})  
    - -
    + + diff --git a/docs/build/html/distributed_2ops_8h.js b/docs/build/html/distributed_2ops_8h.js new file mode 100644 index 000000000..5c1c7d4db --- /dev/null +++ b/docs/build/html/distributed_2ops_8h.js @@ -0,0 +1,8 @@ +var distributed_2ops_8h = +[ + [ "mlx::core::distributed::all_gather", "namespacemlx_1_1core_1_1distributed.html#a82ef5e8cc7ac62cd228e51b1c1b77cb7", null ], + [ "mlx::core::distributed::all_sum", "namespacemlx_1_1core_1_1distributed.html#a67ccb1a5445fc6f5db49dd36a15e5980", null ], + [ "mlx::core::distributed::recv", "namespacemlx_1_1core_1_1distributed.html#af93c1680b656e98158d5f6eed8e092e8", null ], + [ "mlx::core::distributed::recv_like", "namespacemlx_1_1core_1_1distributed.html#a2822b78bce2c679e6ff940b2fca944f0", null ], + [ "mlx::core::distributed::send", "namespacemlx_1_1core_1_1distributed.html#a5a8360edaa3a528a3927fce4d2cf1777", null ] +]; \ No newline at end of file diff --git a/docs/build/html/distributed_2ops_8h_source.html b/docs/build/html/distributed_2ops_8h_source.html index b046ea2a5..064e915fe 100644 --- a/docs/build/html/distributed_2ops_8h_source.html +++ b/docs/build/html/distributed_2ops_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/ops.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    ops.h
    @@ -118,8 +132,8 @@ $(function(){ initResizable(false); });
    25 std::optional<Group> group = std::nullopt,
    26 StreamOrDevice s = {});
    27
    - -
    29 std::vector<int> shape,
    + +
    29 Shape shape,
    30 Dtype dtype,
    31 int src,
    32 std::optional<Group> group = std::nullopt,
    @@ -132,22 +146,26 @@ $(function(){ initResizable(false); });
    39 StreamOrDevice s = {});
    40
    41} // namespace mlx::core::distributed
    -
    Definition array.h:23
    +
    Definition array.h:24
    Definition distributed.h:9
    -
    array recv(std::vector< int > shape, Dtype dtype, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={})
    array recv_like(const array &x, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={})
    array send(const array &x, int dst, std::optional< Group > group=std::nullopt, StreamOrDevice s={})
    array all_sum(const array &x, std::optional< Group > group=std::nullopt, StreamOrDevice s={})
    array all_gather(const array &x, std::optional< Group > group=std::nullopt, StreamOrDevice S={})
    -
    std::variant< std::monostate, Stream, Device > StreamOrDevice
    Definition utils.h:14
    +
    array recv(Shape shape, Dtype dtype, int src, std::optional< Group > group=std::nullopt, StreamOrDevice s={})
    +
    std::vector< ShapeElem > Shape
    Definition array.h:21
    +
    std::variant< std::monostate, Stream, Device > StreamOrDevice
    Definition utils.h:15
    Definition dtype.h:13
    - - + + diff --git a/docs/build/html/distributed_2primitives_8h.html b/docs/build/html/distributed_2primitives_8h.html index d54b60973..4f01d8e5c 100644 --- a/docs/build/html/distributed_2primitives_8h.html +++ b/docs/build/html/distributed_2primitives_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/primitives.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -123,10 +137,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/distributed_2primitives_8h.js b/docs/build/html/distributed_2primitives_8h.js new file mode 100644 index 000000000..a8dc0af08 --- /dev/null +++ b/docs/build/html/distributed_2primitives_8h.js @@ -0,0 +1,8 @@ +var distributed_2primitives_8h = +[ + [ "mlx::core::distributed::DistPrimitive", "classmlx_1_1core_1_1distributed_1_1_dist_primitive.html", "classmlx_1_1core_1_1distributed_1_1_dist_primitive" ], + [ "mlx::core::distributed::AllReduce", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html", "classmlx_1_1core_1_1distributed_1_1_all_reduce" ], + [ "mlx::core::distributed::AllGather", "classmlx_1_1core_1_1distributed_1_1_all_gather.html", "classmlx_1_1core_1_1distributed_1_1_all_gather" ], + [ "mlx::core::distributed::Send", "classmlx_1_1core_1_1distributed_1_1_send.html", "classmlx_1_1core_1_1distributed_1_1_send" ], + [ "mlx::core::distributed::Recv", "classmlx_1_1core_1_1distributed_1_1_recv.html", "classmlx_1_1core_1_1distributed_1_1_recv" ] +]; \ No newline at end of file diff --git a/docs/build/html/distributed_2primitives_8h_source.html b/docs/build/html/distributed_2primitives_8h_source.html index 7aa017469..bd56f1a1a 100644 --- a/docs/build/html/distributed_2primitives_8h_source.html +++ b/docs/build/html/distributed_2primitives_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/primitives.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    primitives.h
    @@ -102,11 +116,11 @@ $(function(){ initResizable(false); });
    10
    -
    11class DistPrimitive : public Primitive {
    +
    11class DistPrimitive : public Primitive {
    12 public:
    -
    14 : Primitive(stream), group_(group) {}
    +
    14 : Primitive(stream), group_(group) {}
    15
    @@ -121,13 +135,13 @@ $(function(){ initResizable(false); });
    23
    -
    24class AllReduce : public DistPrimitive {
    +
    24class AllReduce : public DistPrimitive {
    25 public:
    -
    26 enum ReduceType { And, Or, Sum, Prod, Min, Max };
    +
    26 enum ReduceType { And, Or, Sum, Prod, Min, Max };
    27
    -
    29 : DistPrimitive(stream, group), reduce_type_(reduce_type) {}
    +
    29 : DistPrimitive(stream, group), reduce_type_(reduce_type) {}
    30
    31 void eval_cpu(const std::vector<array>& inputs, std::vector<array>& outputs)
    @@ -178,9 +192,9 @@ $(function(){ initResizable(false); });
    74
    -
    75class AllGather : public DistPrimitive {
    +
    75class AllGather : public DistPrimitive {
    76 public:
    - +
    78
    79 void eval_cpu(const std::vector<array>& inputs, std::vector<array>& outputs)
    80 override;
    @@ -200,16 +214,16 @@ $(function(){ initResizable(false); });
    94 const std::vector<int>& argnums,
    95 const std::vector<array>& outputs) override;
    96
    - +
    98};
    99
    -
    100class Send : public DistPrimitive {
    +
    100class Send : public DistPrimitive {
    101 public:
    -
    103 : DistPrimitive(stream, group), dst_(dst) {}
    +
    103 : DistPrimitive(stream, group), dst_(dst) {}
    104
    105 void eval_cpu(const std::vector<array>& inputs, std::vector<array>& outputs)
    @@ -220,7 +234,7 @@ $(function(){ initResizable(false); });
    110 const std::vector<array>& inputs,
    111 const std::vector<int>& axes) override;
    112
    - +
    114
    115 private:
    116 int dst_;
    @@ -228,11 +242,11 @@ $(function(){ initResizable(false); });
    118
    -
    119class Recv : public DistPrimitive {
    +
    119class Recv : public DistPrimitive {
    120 public:
    -
    122 : DistPrimitive(stream, group), src_(src) {}
    +
    122 : DistPrimitive(stream, group), src_(src) {}
    123
    124 void eval_cpu(const std::vector<array>& inputs, std::vector<array>& outputs)
    @@ -240,7 +254,7 @@ $(function(){ initResizable(false); });
    126 void eval_gpu(const std::vector<array>& inputs, std::vector<array>& outputs)
    127 override;
    128
    - +
    130
    131 private:
    132 int src_;
    @@ -248,9 +262,8 @@ $(function(){ initResizable(false); });
    134
    135} // namespace mlx::core::distributed
    -
    Definition primitives.h:48
    const Stream & stream()
    The stream the primitive will run on.
    Definition primitives.h:58
    -
    Definition primitives.h:75
    +
    Primitive(Stream stream)
    Definition primitives.h:50
    void eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    std::vector< array > jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
    The Jacobian-vector product.
    @@ -258,7 +271,6 @@ $(function(){ initResizable(false); });
    void eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...
    std::pair< std::vector< array >, std::vector< int > > vmap(const std::vector< array > &inputs, const std::vector< int > &axes) override
    The primitive must know how to vectorize itself across the given axes.
    AllGather(Stream stream, Group group)
    Definition primitives.h:77
    -
    Definition primitives.h:24
    AllReduce(Stream stream, Group group, ReduceType reduce_type)
    Definition primitives.h:28
    std::pair< std::vector< array >, std::vector< int > > vmap(const std::vector< array > &inputs, const std::vector< int > &axes) override
    The primitive must know how to vectorize itself across the given axes.
    void eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    @@ -273,15 +285,12 @@ $(function(){ initResizable(false); });
    std::vector< array > vjp(const std::vector< array > &primals, const std::vector< array > &cotangents, const std::vector< int > &argnums, const std::vector< array > &outputs) override
    The vector-Jacobian product.
    void eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...
    std::vector< array > jvp(const std::vector< array > &primals, const std::vector< array > &tangents, const std::vector< int > &argnums) override
    The Jacobian-vector product.
    -
    Definition primitives.h:11
    const Group & group() const
    Definition primitives.h:16
    DistPrimitive(Stream stream, Group group)
    Definition primitives.h:13
    -
    Definition primitives.h:119
    void eval_cpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    A primitive must know how to evaluate itself on the CPU/GPU for the given inputs and populate the out...
    Recv(Stream stream, Group group, int src)
    Definition primitives.h:121
    void eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    -
    Definition primitives.h:100
    void eval_gpu(const std::vector< array > &inputs, std::vector< array > &outputs) override
    Send(Stream stream, Group group, int dst)
    Definition primitives.h:102
    @@ -291,14 +300,16 @@ $(function(){ initResizable(false); });
    Definition distributed.h:9
    -
    Definition ops.h:185
    Definition stream.h:9
    -
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:19
    +
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:24
    - - + + diff --git a/docs/build/html/distributed_8h.html b/docs/build/html/distributed_8h.html index aff90e5cb..942bf585d 100644 --- a/docs/build/html/distributed_8h.html +++ b/docs/build/html/distributed_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/distributed.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -114,6 +128,8 @@ Namespaces   namespace  mlx::core::distributed   +namespace  mlx::core::distributed::detail +  @@ -124,10 +140,13 @@ Functions

    Functions

     
    - -
    + + diff --git a/docs/build/html/distributed_8h.js b/docs/build/html/distributed_8h.js new file mode 100644 index 000000000..e4af7d429 --- /dev/null +++ b/docs/build/html/distributed_8h.js @@ -0,0 +1,6 @@ +var distributed_8h = +[ + [ "mlx::core::distributed::Group", "structmlx_1_1core_1_1distributed_1_1_group.html", "structmlx_1_1core_1_1distributed_1_1_group" ], + [ "mlx::core::distributed::init", "namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d", null ], + [ "mlx::core::distributed::is_available", "namespacemlx_1_1core_1_1distributed.html#a95655473cd0032c06e5fe3fca85aeef3", null ] +]; \ No newline at end of file diff --git a/docs/build/html/distributed_8h_source.html b/docs/build/html/distributed_8h_source.html index 774c3388d..9d2c9fd42 100644 --- a/docs/build/html/distributed_8h_source.html +++ b/docs/build/html/distributed_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/distributed.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    distributed.h
    @@ -102,48 +116,61 @@ $(function(){ initResizable(false); });
    10
    -
    11/* Check if a communication backend is available */
    - -
    13
    -
    -
    19struct Group {
    -
    20 Group(std::shared_ptr<void> group) : group_(group) {}
    -
    21
    -
    22 int rank();
    -
    23 int size();
    -
    24
    -
    33 Group split(int color, int key = -1);
    -
    34
    -
    -
    35 const std::shared_ptr<void>& raw_group() {
    -
    36 return group_;
    -
    37 }
    +
    11// Forward declaration of the base group implementation.
    +
    +
    12namespace detail {
    +
    13class GroupImpl;
    +
    14};
    -
    38
    -
    39 private:
    -
    40 std::shared_ptr<void> group_{nullptr};
    -
    41};
    +
    15
    +
    16/* Check if a communication backend is available */
    + +
    18
    +
    +
    24struct Group {
    +
    25 Group(std::shared_ptr<detail::GroupImpl> group) : group_(std::move(group)) {}
    +
    26
    +
    27 int rank() const;
    +
    28 int size() const;
    +
    29
    +
    38 Group split(int color, int key = -1) const;
    +
    39
    +
    +
    40 const std::shared_ptr<detail::GroupImpl>& raw_group() const {
    +
    41 return group_;
    +
    42 }
    -
    42
    -
    51Group init(bool strict = false);
    -
    52
    -
    53} // namespace mlx::core::distributed
    +
    43
    +
    44 private:
    +
    45 std::shared_ptr<detail::GroupImpl> group_{nullptr};
    +
    46};
    +
    +
    47
    +
    56Group init(bool strict = false);
    +
    57
    +
    58} // namespace mlx::core::distributed
    +
    Abstract base class of a distributed group implementation.
    Definition distributed_impl.h:12
    +
    array std(const array &a, bool keepdims, int ddof=0, StreamOrDevice s={})
    Computes the standard deviation of the elements of an array.
    +
    Definition distributed.h:12
    Definition distributed.h:9
    Group init(bool strict=false)
    Initialize the distributed backend and return the group containing all discoverable processes.
    -
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:19
    -
    const std::shared_ptr< void > & raw_group()
    Definition distributed.h:35
    -
    Group(std::shared_ptr< void > group)
    Definition distributed.h:20
    -
    Group split(int color, int key=-1)
    Split the group according to the provided color.
    - - +
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:24
    +
    Group(std::shared_ptr< detail::GroupImpl > group)
    Definition distributed.h:25
    + + +
    Group split(int color, int key=-1) const
    Split the group according to the provided color.
    +
    const std::shared_ptr< detail::GroupImpl > & raw_group() const
    Definition distributed.h:40
    - -
    + + diff --git a/docs/build/html/distributed__impl_8h.html b/docs/build/html/distributed__impl_8h.html index bb38d3b26..094d57e80 100644 --- a/docs/build/html/distributed__impl_8h.html +++ b/docs/build/html/distributed__impl_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/distributed_impl.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    distributed_impl.h File Reference
    @@ -98,6 +113,12 @@ $(function(){ initResizable(false); });

    Go to the source code of this file.

    + + + + +

    +Classes

    class  mlx::core::distributed::detail::GroupImpl
     Abstract base class of a distributed group implementation. More...
     
    @@ -125,10 +146,13 @@ Functions

    Namespaces

    namespace  mlx
     
    - - + + diff --git a/docs/build/html/distributed__impl_8h.js b/docs/build/html/distributed__impl_8h.js new file mode 100644 index 000000000..8481f0f38 --- /dev/null +++ b/docs/build/html/distributed__impl_8h.js @@ -0,0 +1,9 @@ +var distributed__impl_8h = +[ + [ "mlx::core::distributed::detail::GroupImpl", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl" ], + [ "mlx::core::distributed::detail::all_gather", "namespacemlx_1_1core_1_1distributed_1_1detail.html#aeb5a1726358213bc75756506f7b54d04", null ], + [ "mlx::core::distributed::detail::all_sum", "namespacemlx_1_1core_1_1distributed_1_1detail.html#aa1d225b25f7b6426c48c5e35860ee960", null ], + [ "mlx::core::distributed::detail::communication_stream", "namespacemlx_1_1core_1_1distributed_1_1detail.html#ac3612edf0e0e18c1e4ba0ce7c6e35cd6", null ], + [ "mlx::core::distributed::detail::recv", "namespacemlx_1_1core_1_1distributed_1_1detail.html#a003de04deb00ecbb19179b3f557df548", null ], + [ "mlx::core::distributed::detail::send", "namespacemlx_1_1core_1_1distributed_1_1detail.html#abf33511660ac71df5fc92f2aad6c6e08", null ] +]; \ No newline at end of file diff --git a/docs/build/html/distributed__impl_8h_source.html b/docs/build/html/distributed__impl_8h_source.html index c87a03740..14c8b923f 100644 --- a/docs/build/html/distributed__impl_8h_source.html +++ b/docs/build/html/distributed__impl_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/distributed/distributed_impl.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    distributed_impl.h
    @@ -97,39 +111,62 @@ $(function(){ initResizable(false); });
    4
    6
    -
    - -
    8
    -
    9/* Return the communication stream. */
    - -
    11
    -
    12/* Perform an all reduce sum operation */
    -
    13void all_sum(Group group, const array& input, array& output);
    -
    14
    -
    15/* Perform an all gather operation */
    -
    16void all_gather(Group group, const array& input, array& output);
    + +
    8
    +
    +
    12class GroupImpl {
    +
    13 public:
    +
    14 virtual int rank() = 0;
    +
    15 virtual int size() = 0;
    +
    16 virtual std::shared_ptr<GroupImpl> split(int color, int key = -1) = 0;
    17
    -
    19void send(Group group, const array& input, int dst);
    -
    20
    -
    22void recv(Group group, array& out, int src);
    -
    23
    -
    24} // namespace mlx::core::distributed::detail
    +
    18 virtual void all_sum(const array& input, array& output) = 0;
    +
    19 virtual void all_gather(const array& input, array& output) = 0;
    +
    20 virtual void send(const array& input, int dst) = 0;
    +
    21 virtual void recv(array& out, int src) = 0;
    +
    22};
    -
    Definition array.h:23
    +
    23
    +
    24/* Return the communication stream. */
    + +
    26
    +
    27/* Perform an all reduce sum operation */
    +
    28void all_sum(Group group, const array& input, array& output);
    +
    29
    +
    30/* Perform an all gather operation */
    +
    31void all_gather(Group group, const array& input, array& output);
    +
    32
    +
    34void send(Group group, const array& input, int dst);
    +
    35
    +
    37void recv(Group group, array& out, int src);
    +
    38
    +
    39} // namespace mlx::core::distributed::detail
    +
    Definition array.h:24
    +
    Abstract base class of a distributed group implementation.
    Definition distributed_impl.h:12
    +
    virtual void all_gather(const array &input, array &output)=0
    +
    virtual std::shared_ptr< GroupImpl > split(int color, int key=-1)=0
    + +
    virtual void recv(array &out, int src)=0
    +
    virtual void send(const array &input, int dst)=0
    + +
    virtual void all_sum(const array &input, array &output)=0
    -
    Definition distributed_impl.h:7
    +
    Definition distributed.h:12
    void recv(Group group, array &out, int src)
    Recv an array from the src rank.
    void all_sum(Group group, const array &input, array &output)
    void send(Group group, const array &input, int dst)
    Send an array to the dst rank.
    void all_gather(Group group, const array &input, array &output)
    Definition stream.h:9
    -
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:19
    +
    A distributed::Group represents a group of independent mlx processes that can communicate.
    Definition distributed.h:24
    - - + + diff --git a/docs/build/html/doxygen.css b/docs/build/html/doxygen.css index 574b33357..a5e9e7e5b 100644 --- a/docs/build/html/doxygen.css +++ b/docs/build/html/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.12.0*/ +/* The standard CSS for doxygen 1.13.1*/ html { /* page base colors */ @@ -1810,6 +1810,11 @@ dl.invariant dt, dl.pre dt, dl.post dt { padding: 2px 0px; } +#side-nav #projectname +{ + font-size: 130%; +} + #projectbrief { font-size: 90%; @@ -2197,10 +2202,14 @@ th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } -tt, code, kbd, samp +tt, code, kbd { display: inline-block; } +tt, code, kbd +{ + vertical-align: top; +} /* @end */ u { diff --git a/docs/build/html/doxygen_crawl.html b/docs/build/html/doxygen_crawl.html index 17b12a878..b69b42bb5 100644 --- a/docs/build/html/doxygen_crawl.html +++ b/docs/build/html/doxygen_crawl.html @@ -4,1427 +4,15 @@ Validator / crawler helper - + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1439,43 +27,27 @@ + + - + + + - + - + - - - + - - - - - - - - - - - - - - + - - - - + - - - + @@ -1490,6 +62,7 @@ + @@ -1524,10 +97,12 @@ + + @@ -1711,7 +286,6 @@ - @@ -1881,245 +455,72 @@ + + + + + - - + + + - - - + - - - + + + + + - + - + - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -2130,6 +531,7 @@ + @@ -2140,14 +542,17 @@ + + + @@ -2155,6 +560,8 @@ + + @@ -2165,6 +572,7 @@ + @@ -2175,6 +583,7 @@ + @@ -2185,6 +594,7 @@ + @@ -2195,6 +605,7 @@ + @@ -2205,6 +616,7 @@ + @@ -2215,6 +627,7 @@ + @@ -2225,8 +638,10 @@ + + @@ -2235,6 +650,7 @@ + @@ -2247,7 +663,9 @@ + + @@ -2255,15 +673,19 @@ + + + + @@ -2271,9 +693,11 @@ + + @@ -2287,25 +711,46 @@ + + + + + + + + + + + + + + + + + + + + + @@ -2316,12 +761,15 @@ + + + @@ -2333,16 +781,19 @@ + + + @@ -2351,6 +802,7 @@ + @@ -2361,13 +813,16 @@ + + + @@ -2378,6 +833,7 @@ + @@ -2388,6 +844,7 @@ + @@ -2398,6 +855,7 @@ + @@ -2406,12 +864,14 @@ + + @@ -2422,6 +882,7 @@ + @@ -2432,24 +893,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2460,6 +950,7 @@ + @@ -2470,6 +961,7 @@ + @@ -2481,6 +973,7 @@ + @@ -2491,6 +984,20 @@ + + + + + + + + + + + + + + @@ -2500,6 +1007,7 @@ + @@ -2507,8 +1015,23 @@ + + + + + + + + + + + + + + + @@ -2519,6 +1042,7 @@ + @@ -2528,16 +1052,19 @@ + - + + + @@ -2545,15 +1072,18 @@ + + + @@ -2564,6 +1094,7 @@ + @@ -2574,6 +1105,7 @@ + @@ -2584,6 +1116,8 @@ + + @@ -2594,12 +1128,19 @@ + + + + + + + @@ -2610,6 +1151,7 @@ + @@ -2620,11 +1162,13 @@ + + @@ -2635,10 +1179,12 @@ + + @@ -2648,6 +1194,7 @@ + @@ -2658,6 +1205,7 @@ + @@ -2668,6 +1216,7 @@ + @@ -2678,6 +1227,7 @@ + @@ -2688,6 +1238,7 @@ + @@ -2697,6 +1248,7 @@ + @@ -2707,6 +1259,7 @@ + @@ -2717,6 +1270,7 @@ + @@ -2727,6 +1281,7 @@ + @@ -2737,6 +1292,7 @@ + @@ -2747,6 +1303,7 @@ + @@ -2755,15 +1312,19 @@ + + + + - + @@ -2774,6 +1335,8 @@ + + @@ -2784,6 +1347,7 @@ + @@ -2801,11 +1365,13 @@ + + @@ -2814,15 +1380,19 @@ + + + + @@ -2833,6 +1403,7 @@ + @@ -2849,6 +1420,8 @@ + + @@ -2859,15 +1432,20 @@ + + + + + @@ -2878,12 +1456,14 @@ + + @@ -2894,14 +1474,17 @@ + + + @@ -2913,6 +1496,7 @@ + @@ -2923,6 +1507,7 @@ + @@ -2933,6 +1518,7 @@ + @@ -2943,6 +1529,7 @@ + @@ -2953,6 +1540,7 @@ + @@ -2963,24 +1551,30 @@ + + + - + + - + + + @@ -2990,27 +1584,34 @@ + + + + - + + + + @@ -3020,6 +1621,7 @@ + @@ -3030,6 +1632,20 @@ + + + + + + + + + + + + + + @@ -3038,6 +1654,7 @@ + @@ -3048,6 +1665,7 @@ + @@ -3058,6 +1676,7 @@ + @@ -3068,9 +1687,11 @@ + + @@ -3078,6 +1699,7 @@ + @@ -3089,20 +1711,29 @@ - - - - - - - + + + + + + + + + + + + + + + + @@ -3113,16 +1744,19 @@ + + + @@ -3196,6 +1830,7 @@ + @@ -3204,6 +1839,7 @@ + @@ -3219,20 +1855,33 @@ + + + + + + + + + + + + + @@ -3240,80 +1889,91 @@ + + + + - + + + + + - + + + - - - + + - - - - + - - + - + + + + + + + - + @@ -3323,6 +1983,7 @@ + @@ -3331,6 +1992,13 @@ + + + + + + + @@ -3354,6 +2022,7 @@ + @@ -3367,6 +2036,7 @@ + @@ -3376,11 +2046,13 @@ + + @@ -3392,26 +2064,32 @@ + + + + + + @@ -3423,6 +2101,7 @@ + @@ -3433,17 +2112,21 @@ + + + + @@ -3456,43 +2139,53 @@ + + + + + + + + + + @@ -3501,76 +2194,38 @@ - + - + + - - - - - - - - + - - - - - + - - - - - - - - - - - - + - - + + + - - - - - - - - - - - + - - - - + - - - - - - - - - - + + + + + @@ -3580,11 +2235,9 @@ + - - - - + @@ -3610,275 +2263,51 @@ + - - - - - + + - - + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -3958,15 +2387,18 @@ - + + + - + + + - - + @@ -4013,10 +2445,7 @@ - - - - + @@ -4041,6 +2470,7 @@ + @@ -4068,7 +2498,6 @@ - @@ -4116,6 +2545,7 @@ + @@ -4123,11 +2553,11 @@ + - @@ -4136,12 +2566,16 @@ + + + + @@ -4167,6 +2601,7 @@ + @@ -4184,7 +2619,6 @@ - @@ -4221,12 +2655,12 @@ + - @@ -4245,7 +2679,6 @@ - @@ -4257,7 +2690,6 @@ - @@ -4265,6 +2697,7 @@ + @@ -4292,6 +2725,7 @@ + @@ -4328,196 +2762,108 @@ - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - + - + + - - - - - - - - - - - - - + + + + + + + - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - + + + + - - + - - - - + - - - - - - + + + - - + - - + + + + + + - - - - + + + @@ -4525,61 +2871,53 @@ + + + + + + + - + + - - - + + + - + + - - - + - - - + - - + - - + - - - - - - - - - - - - + - - - - + + + + @@ -4823,11 +3161,11 @@ - + @@ -4843,7 +3181,6 @@ - @@ -4853,6 +3190,7 @@ + @@ -4869,6 +3207,7 @@ + @@ -4877,10 +3216,10 @@ + - @@ -4888,15 +3227,14 @@ + - - @@ -4914,8 +3252,10 @@ + + @@ -4925,14 +3265,18 @@ + + + + @@ -4946,15 +3290,12 @@ - - - @@ -4969,7 +3310,7 @@ - + @@ -4977,22 +3318,26 @@ + + + + - + @@ -5009,6 +3354,7 @@ + @@ -5016,8 +3362,10 @@ - + + + @@ -5049,24 +3397,24 @@ + - + - + - @@ -5084,12 +3432,13 @@ - + + @@ -5109,6 +3458,7 @@ + @@ -5116,13 +3466,13 @@ - + @@ -5131,7 +3481,6 @@ - @@ -5140,14 +3489,10 @@ - - - - @@ -5162,24 +3507,27 @@ + + - - + + + @@ -5189,18 +3537,16 @@ + - - - - + @@ -5211,14 +3557,16 @@ + - + + @@ -5246,6 +3594,7 @@ + @@ -5267,12 +3616,15 @@ + - + + + @@ -5290,7 +3642,6 @@ - @@ -5299,7 +3650,6 @@ - @@ -5315,9 +3665,11 @@ + + @@ -5325,6 +3677,7 @@ + @@ -5333,18 +3686,17 @@ - + - @@ -5364,19 +3716,20 @@ + - + + - @@ -5399,6 +3752,7 @@ + @@ -5411,70 +3765,84 @@ + + + + + + + + + - + + + + + - + + - - - - - + + - + + + - + - + + @@ -5546,41 +3914,41 @@ - - - - - - + + + + + + + + - + - - - - + + + - - + + - - - - - + + + - - + + - - + + + @@ -5610,6 +3978,18 @@ + + + + + + + + + + + + @@ -5661,420 +4041,68 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + + + - + - - - - + + + + + - + + - - - - + - + @@ -6090,63 +4118,38 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + + + - + + + - - - + + + + @@ -6156,69 +4159,71 @@ + - + + - - - - - - + - - + + + + - + - + + + + + + + - + - - + + + + - - - - - - - + + @@ -6236,12 +4241,14 @@ + + @@ -6250,34 +4257,47 @@ + + + + + + + + + + + + + @@ -6289,54 +4309,68 @@ + - - + + + + + + - - - - - + + + + + + + + + + + + + + @@ -6348,11 +4382,13 @@ + + @@ -6367,6 +4403,7 @@ + @@ -6379,192 +4416,210 @@ + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + + + - + + + + + + + + + + + - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + @@ -6586,6 +4641,7 @@ + @@ -6629,60 +4685,81 @@ + + + + + + + + + + + + + + + + + + + + + @@ -6697,6 +4774,7 @@ + @@ -6717,17 +4795,15 @@ + - + - - - - - - - - + + + + + @@ -6736,6 +4812,7 @@ + @@ -6744,22 +4821,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + @@ -6769,6 +4875,7 @@ + @@ -6804,9 +4911,32 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -6820,21 +4950,26 @@ + + + - - - + + + + + @@ -6846,6 +4981,7 @@ + @@ -6853,20 +4989,24 @@ + + + + @@ -6874,28 +5014,40 @@ + + + + + + + + + + + + @@ -6907,25 +5059,35 @@ + + + + + + + + + + @@ -6937,77 +5099,109 @@ + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7015,30 +5209,46 @@ + + + + + + + + - - - - - + + + + + + + + + + + + + @@ -7059,9 +5269,11 @@ + + @@ -7073,10 +5285,23 @@ + + + + + + + + + + + + + @@ -7088,13 +5313,13 @@ + + - - @@ -7102,30 +5327,32 @@ - + - + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -7141,8 +5368,10 @@ + + @@ -7158,6 +5387,7 @@ + @@ -7172,7 +5402,6 @@ - @@ -7184,37 +5413,39 @@ + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + @@ -7224,6 +5455,7 @@ + @@ -7249,6 +5481,7 @@ + @@ -7272,6 +5505,7 @@ + @@ -7294,6 +5528,7 @@ + @@ -7317,6 +5552,7 @@ + @@ -7338,6 +5574,7 @@ + @@ -7362,6 +5599,7 @@ + @@ -7383,39 +5621,43 @@ + - + + - - + + - + + + + - - + - + @@ -7429,6 +5671,7 @@ + @@ -7440,10 +5683,12 @@ + + @@ -7458,9 +5703,8 @@ - - + @@ -7471,60 +5715,72 @@ + + + + + + + - + - - + + + + + + + + - - + @@ -7542,12 +5798,14 @@ + + @@ -7559,276 +5817,43 @@ + + - + - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/docs/build/html/dtype_8h.html b/docs/build/html/dtype_8h.html index ad79af0a4..86d1befaf 100644 --- a/docs/build/html/dtype_8h.html +++ b/docs/build/html/dtype_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/dtype.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -180,10 +194,13 @@ Variables  
    - -
    + + diff --git a/docs/build/html/dtype_8h.js b/docs/build/html/dtype_8h.js new file mode 100644 index 000000000..388f6aef6 --- /dev/null +++ b/docs/build/html/dtype_8h.js @@ -0,0 +1,33 @@ +var dtype_8h = +[ + [ "mlx::core::Dtype", "structmlx_1_1core_1_1_dtype.html", "structmlx_1_1core_1_1_dtype" ], + [ "mlx::core::TypeToDtype< T >", "structmlx_1_1core_1_1_type_to_dtype.html", "structmlx_1_1core_1_1_type_to_dtype" ], + [ "mlx::core::issubdtype", "namespacemlx_1_1core.html#aca9e69b06f4212eba44bf0ce6711d5f7", null ], + [ "mlx::core::issubdtype", "namespacemlx_1_1core.html#ae9ee4a7c205df061c1caa7e62b7504e8", null ], + [ "mlx::core::issubdtype", "namespacemlx_1_1core.html#aca39f224c1d17bde35dfcb9088430704", null ], + [ "mlx::core::issubdtype", "namespacemlx_1_1core.html#ab5b1a5a3d545a5de00c3117f76d71a1d", null ], + [ "mlx::core::kindof", "namespacemlx_1_1core.html#ad527b86818823db040195785efd7d724", null ], + [ "mlx::core::promote_types", "namespacemlx_1_1core.html#a505922e54acd43114308e3bdbda0e497", null ], + [ "mlx::core::size_of", "namespacemlx_1_1core.html#add4794cc0ffe5d717fc146084a235d95", null ], + [ "mlx::core::bfloat16", "namespacemlx_1_1core.html#a514cf8b4e6f0a6af3a867e752f4338f7", null ], + [ "mlx::core::bool_", "namespacemlx_1_1core.html#a113d2bac7e4aa6a4cb4a5c3242527b82", null ], + [ "mlx::core::complex64", "namespacemlx_1_1core.html#af99db87e0078bfcdb383f5689bc874d4", null ], + [ "mlx::core::complexfloating", "namespacemlx_1_1core.html#a70b8e88c9df750af984757105af33423", null ], + [ "mlx::core::float16", "namespacemlx_1_1core.html#abf228ee9d8ec48c03bb15adcc4e1f3ec", null ], + [ "mlx::core::float32", "namespacemlx_1_1core.html#a6894543b340321193dfb8052c438a319", null ], + [ "mlx::core::floating", "namespacemlx_1_1core.html#ac9f9ea13cf0661e671569d37d14a128a", null ], + [ "mlx::core::generic", "namespacemlx_1_1core.html#a34d69c4d46aa9b2a4a79dba7aba093d2", null ], + [ "mlx::core::inexact", "namespacemlx_1_1core.html#a54c6fae21b7f2fea8e6f80011ef38534", null ], + [ "mlx::core::int16", "namespacemlx_1_1core.html#a71ebba4ad1afa730962f0692c4f42f07", null ], + [ "mlx::core::int32", "namespacemlx_1_1core.html#a5d6373aad1444edc9de1eb07bfe5cad3", null ], + [ "mlx::core::int64", "namespacemlx_1_1core.html#a9019bdc191054ada0a502c7c34cef5b8", null ], + [ "mlx::core::int8", "namespacemlx_1_1core.html#a892e934e146dd938d144cee8813ca672", null ], + [ "mlx::core::integer", "namespacemlx_1_1core.html#a074d000f25ae3ed77450e6a5fec4b38b", null ], + [ "mlx::core::number", "namespacemlx_1_1core.html#a069c0aab6b36aef34419534ec4a4310d", null ], + [ "mlx::core::signedinteger", "namespacemlx_1_1core.html#a24e1618af591d737d73729665e868001", null ], + [ "mlx::core::uint16", "namespacemlx_1_1core.html#a312a70c487366968af5e6cbf5038c812", null ], + [ "mlx::core::uint32", "namespacemlx_1_1core.html#ac63820d6fe10545907c33faf466a929e", null ], + [ "mlx::core::uint64", "namespacemlx_1_1core.html#a1f42e3dd4787d2ecec7114a12daefec8", null ], + [ "mlx::core::uint8", "namespacemlx_1_1core.html#a9778d50afbf456b0bd738751243b3b68", null ], + [ "mlx::core::unsignedinteger", "namespacemlx_1_1core.html#a42e9706a5521bb25eaf12ccad94bfc81", null ] +]; \ No newline at end of file diff --git a/docs/build/html/dtype_8h_source.html b/docs/build/html/dtype_8h_source.html index db9b2ec0c..9423de453 100644 --- a/docs/build/html/dtype_8h_source.html +++ b/docs/build/html/dtype_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/dtype.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    dtype.h
    @@ -104,46 +118,46 @@ $(function(){ initResizable(false); });
    11namespace mlx::core {
    12
    -
    13struct Dtype {
    +
    13struct Dtype {
    14 enum class Val {
    -
    15 bool_,
    -
    16 uint8,
    -
    17 uint16,
    -
    18 uint32,
    -
    19 uint64,
    -
    20 int8,
    -
    21 int16,
    -
    22 int32,
    -
    23 int64,
    -
    24 float16,
    -
    25 float32,
    - - + + + + + + + + + + + + +
    28 };
    29
    30 enum class Kind {
    -
    31 b, /* bool */
    -
    32 u, /* unsigned int */
    -
    33 i, /* signed int */
    -
    34 f, /* float */
    -
    35 c, /* complex */
    -
    36 V, /* void - used for brain float */
    +
    31 b, /* bool */
    +
    32 u, /* unsigned int */
    +
    33 i, /* signed int */
    +
    34 f, /* float */
    +
    35 c, /* complex */
    +
    36 V, /* void - used for brain float */
    37 };
    38
    39 enum class Category {
    - - -
    42 inexact,
    - - -
    45 integer,
    -
    46 number,
    -
    47 generic
    + + + + + + + +
    47 generic
    48 };
    49
    @@ -252,44 +266,47 @@ $(function(){ initResizable(false); });
    constexpr Val val() const
    Definition dtype.h:55
    constexpr uint8_t size() const
    Definition dtype.h:58
    Category
    Definition dtype.h:39
    - - - - - - - - +
    @ integer
    Definition dtype.h:45
    +
    @ floating
    Definition dtype.h:41
    +
    @ generic
    Definition dtype.h:47
    +
    @ unsignedinteger
    Definition dtype.h:44
    +
    @ number
    Definition dtype.h:46
    +
    @ inexact
    Definition dtype.h:42
    +
    @ signedinteger
    Definition dtype.h:43
    +
    @ complexfloating
    Definition dtype.h:40
    Kind
    Definition dtype.h:30
    - - - - - - +
    @ c
    Definition dtype.h:35
    +
    @ V
    Definition dtype.h:36
    +
    @ u
    Definition dtype.h:32
    +
    @ i
    Definition dtype.h:33
    +
    @ f
    Definition dtype.h:34
    +
    @ b
    Definition dtype.h:31
    Val
    Definition dtype.h:14
    - - - - - - - - - - - - - +
    @ int32
    Definition dtype.h:22
    +
    @ float16
    Definition dtype.h:24
    +
    @ int8
    Definition dtype.h:20
    +
    @ uint64
    Definition dtype.h:19
    +
    @ uint32
    Definition dtype.h:18
    +
    @ bfloat16
    Definition dtype.h:26
    +
    @ bool_
    Definition dtype.h:15
    +
    @ uint8
    Definition dtype.h:16
    +
    @ complex64
    Definition dtype.h:27
    +
    @ uint16
    Definition dtype.h:17
    +
    @ int16
    Definition dtype.h:21
    +
    @ float32
    Definition dtype.h:25
    +
    @ int64
    Definition dtype.h:23
    constexpr Dtype(Val val, uint8_t size)
    Definition dtype.h:50
    Definition dtype.h:109
    Definition complex.h:34
    - - + + diff --git a/docs/build/html/einsum_8h.html b/docs/build/html/einsum_8h.html index 7038c2a6b..8cf231197 100644 --- a/docs/build/html/einsum_8h.html +++ b/docs/build/html/einsum_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/einsum.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Namespaces | @@ -117,10 +131,13 @@ Functions  
    - -
    + + diff --git a/docs/build/html/einsum_8h.js b/docs/build/html/einsum_8h.js new file mode 100644 index 000000000..f02232d4c --- /dev/null +++ b/docs/build/html/einsum_8h.js @@ -0,0 +1,5 @@ +var einsum_8h = +[ + [ "mlx::core::einsum", "namespacemlx_1_1core.html#a2a9b98c65578dd3720b3b375c1471e58", null ], + [ "mlx::core::einsum_path", "namespacemlx_1_1core.html#ab14ec41f17675691c1fdebb8990b6695", null ] +]; \ No newline at end of file diff --git a/docs/build/html/einsum_8h_source.html b/docs/build/html/einsum_8h_source.html index 360501d7f..f6b97b6cc 100644 --- a/docs/build/html/einsum_8h_source.html +++ b/docs/build/html/einsum_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/einsum.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    einsum.h
    @@ -114,17 +128,20 @@ $(function(){ initResizable(false); });
    21
    22} // namespace mlx::core
    -
    Definition array.h:23
    +
    Definition array.h:24
    Definition allocator.h:7
    array einsum(const std::string &subscripts, const std::vector< array > &operands, StreamOrDevice s={})
    -
    std::variant< std::monostate, Stream, Device > StreamOrDevice
    Definition utils.h:14
    +
    std::variant< std::monostate, Stream, Device > StreamOrDevice
    Definition utils.h:15
    std::pair< std::vector< std::vector< int > >, std::string > einsum_path(const std::string &subscripts, const std::vector< array > &operands)
    - - + + diff --git a/docs/build/html/erf_8h.html b/docs/build/html/erf_8h.html index 228ab9f10..78599a06b 100644 --- a/docs/build/html/erf_8h.html +++ b/docs/build/html/erf_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/erf.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    @@ -140,10 +154,13 @@ Functions
    - - + + diff --git a/docs/build/html/erf_8h.js b/docs/build/html/erf_8h.js new file mode 100644 index 000000000..55c7d16db --- /dev/null +++ b/docs/build/html/erf_8h.js @@ -0,0 +1,5 @@ +var erf_8h = +[ + [ "erf", "erf_8h.html#a6ce199ee56105c67adbf8c48c019a8b2", null ], + [ "erfinv", "erf_8h.html#a1846e0d683c7aff826bb32addcc3b885", null ] +]; \ No newline at end of file diff --git a/docs/build/html/erf_8h_source.html b/docs/build/html/erf_8h_source.html index d1fa7b458..3a7c485b6 100644 --- a/docs/build/html/erf_8h_source.html +++ b/docs/build/html/erf_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/backend/metal/kernels/erf.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - + -
    erf.h
    @@ -103,16 +117,16 @@ $(function(){ initResizable(false); });
    10 */
    11float erf(float a) {
    -
    12 float r, s, t, u;
    +
    12 float r, s, t, u;
    13 t = metal::abs(a);
    14 s = a * a;
    15 if (t > 0.927734375f) {
    16 // maximum error 0.99527 ulp
    17 r = metal::fma(
    18 -1.72853470e-5f, t, 3.83197126e-4f); // -0x1.220000p-16,0x1.91cfb2p-12
    -
    19 u = metal::fma(
    +
    19 u = metal::fma(
    20 -3.88396438e-3f, t, 2.42546219e-2f); // -0x1.fd1438p-9, 0x1.8d6342p-6
    -
    21 r = metal::fma(r, s, u);
    +
    21 r = metal::fma(r, s, u);
    22 r = metal::fma(r, t, -1.06777877e-1f); // -0x1.b55cb8p-4
    23 r = metal::fma(r, t, -6.34846687e-1f); // -0x1.450aa0p-1
    24 r = metal::fma(r, t, -1.28717512e-1f); // -0x1.079d0cp-3
    @@ -170,12 +184,14 @@ $(function(){ initResizable(false); });
    METAL_FUNC bfloat16_t fma(bfloat16_t x, bfloat16_t y, bfloat16_t z)
    Definition bf16_math.h:232
    METAL_FUNC bfloat16_t abs(bfloat16_t x)
    Definition bf16_math.h:232
    METAL_FUNC bfloat16_t exp(bfloat16_t x)
    Definition bf16_math.h:232
    -
    uint32_t u
    Definition bf16.h:17
    - - + + diff --git a/docs/build/html/event_8h.html b/docs/build/html/event_8h.html index 8f2333de3..1283fda67 100644 --- a/docs/build/html/event_8h.html +++ b/docs/build/html/event_8h.html @@ -3,7 +3,7 @@ - + MLX: mlx/event.h File Reference @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    + - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    Classes | @@ -113,10 +127,13 @@ Namespaces  
    - -
    + + diff --git a/docs/build/html/event_8h.js b/docs/build/html/event_8h.js new file mode 100644 index 000000000..2d2a295fa --- /dev/null +++ b/docs/build/html/event_8h.js @@ -0,0 +1,4 @@ +var event_8h = +[ + [ "mlx::core::Event", "classmlx_1_1core_1_1_event.html", "classmlx_1_1core_1_1_event" ] +]; \ No newline at end of file diff --git a/docs/build/html/event_8h_source.html b/docs/build/html/event_8h_source.html index 0cc88bdce..72c17d5a2 100644 --- a/docs/build/html/event_8h_source.html +++ b/docs/build/html/event_8h_source.html @@ -3,7 +3,7 @@ - + MLX: mlx/event.h Source File @@ -11,11 +11,18 @@ + + + @@ -28,12 +35,24 @@
    MLX
    +
    + +   + + + + +
    +
    - + - - + +
    + +
    +
    +
    - - +
    - -
    -
    event.h
    @@ -102,7 +116,7 @@ $(function(){ initResizable(false); });
    9namespace mlx::core {
    10
    -
    11class Event {
    +
    11class Event {
    12 public:
    13 Event() = default;
    14
    @@ -162,7 +176,6 @@ $(function(){ initResizable(false); });
    58
    59} // namespace mlx::core
    -
    Definition event.h:11
    bool is_signaled() const
    void set_value(uint64_t v)
    Definition event.h:35
    Event(const Stream &steam)
    @@ -178,10 +191,13 @@ $(function(){ initResizable(false); });
    static constexpr DeviceType cpu
    Definition device.h:13
    Definition stream.h:9
    - - + + diff --git a/docs/build/html/examples/linear_regression.html b/docs/build/html/examples/linear_regression.html index c4e3220f1..3940670da 100644 --- a/docs/build/html/examples/linear_regression.html +++ b/docs/build/html/examples/linear_regression.html @@ -8,7 +8,7 @@ - Linear Regression — MLX 0.21.1 documentation + Linear Regression — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.export_function

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.export_function#

    +
    +
    +export_function(file: str, fun: Callable, *args, shapeless: bool = False, **kwargs) None#
    +

    Export a function to a file.

    +

    Example input arrays must be provided to export a function. The example +inputs can be variable *args and **kwargs or a tuple of arrays +and/or dictionary of string keys with array values.

    +
    +

    Warning

    +

    This is part of an experimental API which is likely to +change in future versions of MLX. Functions exported with older +versions of MLX may not be compatible with future versions.

    +
    +
    +
    Parameters:
    +
      +
    • file (str) – File path to export the function to.

    • +
    • fun (Callable) – A function which takes as input zero or more +array and returns one or more array.

    • +
    • *args (array) – Example array inputs to the function.

    • +
    • shapeless (bool, optional) – Whether or not the function allows +inputs with variable shapes. Default: False.

    • +
    • **kwargs (array) – Additional example keyword array inputs to the +function.

    • +
    +
    +
    +

    Example

    +
    def fun(x, y):
    +    return x + y
    +
    +x = mx.array(1)
    +y = mx.array([1, 2, 3])
    +mx.export_function("fun.mlxfn", fun, x, y=y)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.export_to_dot.html b/docs/build/html/python/_autosummary/mlx.core.export_to_dot.html new file mode 100644 index 000000000..cf7b67d35 --- /dev/null +++ b/docs/build/html/python/_autosummary/mlx.core.export_to_dot.html @@ -0,0 +1,1016 @@ + + + + + + + + + + + mlx.core.export_to_dot — MLX 0.22.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.export_to_dot

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.export_to_dot#

    +
    +
    +export_to_dot(file: object, *args, **kwargs) None#
    +

    Export a graph to DOT format for visualization.

    +

    A variable number of output arrays can be provided for exporting +The graph exported will recursively include all unevaluated inputs of +the provided outputs.

    +
    +
    Parameters:
    +
      +
    • file (str) – The file path to export to.

    • +
    • *args (array) – The output arrays.

    • +
    • **kwargs (dict[str, array]) – Provide some names for arrays in the +graph to make the result easier to parse.

    • +
    +
    +
    +

    Example

    +
    >>> a = mx.array(1) + mx.array(2)
    +>>> mx.export_to_dot("graph.dot", a)
    +>>> x = mx.array(1)
    +>>> y = mx.array(2)
    +>>> mx.export_to_dot("graph.dot", x + y, x=x, y=y)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.exporter.html b/docs/build/html/python/_autosummary/mlx.core.exporter.html new file mode 100644 index 000000000..b79fc55f4 --- /dev/null +++ b/docs/build/html/python/_autosummary/mlx.core.exporter.html @@ -0,0 +1,1020 @@ + + + + + + + + + + + mlx.core.exporter — MLX 0.22.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.exporter

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.exporter#

    +
    +
    +exporter(file: str, fun: Callable, *, shapeless: bool = False) mlx.core.FunctionExporter#
    +

    Make a callable object to export multiple traces of a function to a file.

    +
    +

    Warning

    +

    This is part of an experimental API which is likely to +change in future versions of MLX. Functions exported with older +versions of MLX may not be compatible with future versions.

    +
    +
    +
    Parameters:
    +
      +
    • file (str) – File path to export the function to.

    • +
    • shapeless (bool, optional) – Whether or not the function allows +inputs with variable shapes. Default: False.

    • +
    +
    +
    +

    Example

    +
    def fun(*args):
    +    return sum(args)
    +
    +with mx.exporter("fun.mlxfn", fun) as exporter:
    +    exporter(mx.array(1))
    +    exporter(mx.array(1), mx.array(2))
    +    exporter(mx.array(1), mx.array(2), mx.array(3))
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.eye.html b/docs/build/html/python/_autosummary/mlx.core.eye.html index 1e28d32a8..c91c0d3fd 100644 --- a/docs/build/html/python/_autosummary/mlx.core.eye.html +++ b/docs/build/html/python/_autosummary/mlx.core.eye.html @@ -8,7 +8,7 @@ - mlx.core.eye — MLX 0.21.1 documentation + mlx.core.eye — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.finfo

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.finfo#

    +
    +
    +class finfo#
    +

    Get information on floating-point types.

    +
    +
    +__init__(self, arg: Dtype, /) None#
    +
    + +

    Methods

    +
    + + + + + +

    __init__(self, arg, /)

    +
    +

    Attributes

    +
    + + + + + + + + + + + +

    dtype

    The Dtype.

    max

    The largest representable number.

    min

    The smallest representable number.

    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.flatten.html b/docs/build/html/python/_autosummary/mlx.core.flatten.html index 38cd58349..fedebaab9 100644 --- a/docs/build/html/python/_autosummary/mlx.core.flatten.html +++ b/docs/build/html/python/_autosummary/mlx.core.flatten.html @@ -8,7 +8,7 @@ - mlx.core.flatten — MLX 0.21.1 documentation + mlx.core.flatten — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.import_function

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.import_function#

    +
    +
    +import_function(file: str) Callable#
    +

    Import a function from a file.

    +

    The imported function can be called either with *args and +**kwargs or with a tuple of arrays and/or dictionary of string +keys with array values. Imported functions always return a tuple of +arrays.

    +
    +

    Warning

    +

    This is part of an experimental API which is likely to +change in future versions of MLX. Functions exported with older +versions of MLX may not be compatible with future versions.

    +
    +
    +
    Parameters:
    +

    file (str) – The file path to import the function from.

    +
    +
    Returns:
    +

    The imported function.

    +
    +
    Return type:
    +

    Callable

    +
    +
    +

    Example

    +
    >>> fn = mx.import_function("function.mlxfn")
    +>>> out = fn(a, b, x=x, y=y)[0]
    +>>>
    +>>> out = fn((a, b), {"x": x, "y": y}[0]
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.inner.html b/docs/build/html/python/_autosummary/mlx.core.inner.html index 168f82285..35b12bae9 100644 --- a/docs/build/html/python/_autosummary/mlx.core.inner.html +++ b/docs/build/html/python/_autosummary/mlx.core.inner.html @@ -8,7 +8,7 @@ - mlx.core.inner — MLX 0.21.1 documentation + mlx.core.inner — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.kron

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.kron#

    +
    +
    +kron(a: array, b: array, *, stream: None | Stream | Device = None) array#
    +

    Compute the Kronecker product of two arrays a and b.

    +
    +
    Parameters:
    +
      +
    • a (array) – The first input array.

    • +
    • b (array) – The second input array.

    • +
    • stream (Union[None, Stream, Device], optional) – Optional stream or +device for execution. Default: None.

    • +
    +
    +
    Returns:
    +

    The Kronecker product of a and b.

    +
    +
    Return type:
    +

    array

    +
    +
    +

    Examples

    +
    >>> a = mx.array([[1, 2], [3, 4]])
    +>>> b = mx.array([[0, 5], [6, 7]])
    +>>> result = mx.kron(a, b)
    +>>> print(result)
    +array([[0, 5, 0, 10],
    +       [6, 7, 12, 14],
    +       [0, 15, 0, 20],
    +       [18, 21, 24, 28]], dtype=int32)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.left_shift.html b/docs/build/html/python/_autosummary/mlx.core.left_shift.html index 0f2fc7b59..5b477f816 100644 --- a/docs/build/html/python/_autosummary/mlx.core.left_shift.html +++ b/docs/build/html/python/_autosummary/mlx.core.left_shift.html @@ -8,7 +8,7 @@ - mlx.core.left_shift — MLX 0.21.1 documentation + mlx.core.left_shift — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.slice

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.slice#

    +
    +
    +slice(a: array, start_indices: array, axes: Sequence[int], slice_size: Sequence[int], *, stream: None | Stream | Device = None) array#
    +

    Extract a sub-array from the input array.

    +
    +
    Parameters:
    +
      +
    • a (array) – Input array

    • +
    • start_indices (array) – The index location to start the slice at.

    • +
    • axes (tuple(int)) – The axes corresponding to the indices in start_indices.

    • +
    • slice_size (tuple(int)) – The size of the slice.

    • +
    +
    +
    Returns:
    +

    The sliced output array.

    +
    +
    Return type:
    +

    array

    +
    +
    +

    Example

    +
    >>> a = mx.array([[1, 2, 3], [4, 5, 6]])
    +>>> mx.slice(a, start_indices=mx.array(1), axes=(0,), slice_size=(1, 2))
    +array([[4, 5]], dtype=int32)
    +>>>
    +>>> mx.slice(a, start_indices=mx.array(1), axes=(1,), slice_size=(2, 1))
    +array([[2],
    +       [5]], dtype=int32)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.slice_update.html b/docs/build/html/python/_autosummary/mlx.core.slice_update.html new file mode 100644 index 000000000..0be9e5811 --- /dev/null +++ b/docs/build/html/python/_autosummary/mlx.core.slice_update.html @@ -0,0 +1,1019 @@ + + + + + + + + + + + mlx.core.slice_update — MLX 0.22.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.slice_update

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.slice_update#

    +
    +
    +slice_update(a: array, update: array, start_indices: array, axes: Sequence[int], *, stream: None | Stream | Device = None) array#
    +

    Update a sub-array of the input array.

    +
    +
    Parameters:
    +
      +
    • a (array) – The input array to update

    • +
    • update (array) – The update array.

    • +
    • start_indices (array) – The index location to start the slice at.

    • +
    • axes (tuple(int)) – The axes corresponding to the indices in start_indices.

    • +
    +
    +
    Returns:
    +

    The output array with the same shape and type as the input.

    +
    +
    Return type:
    +

    array

    +
    +
    +

    Example

    +
    >>> a = mx.zeros((3, 3))
    +>>> mx.slice_update(a, mx.ones((1, 2)), start_indices=mx.array(1, 1), axes=(0, 1))
    +array([[0, 0, 0],
    +       [0, 1, 0],
    +       [0, 1, 0]], dtype=float32)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.softmax.html b/docs/build/html/python/_autosummary/mlx.core.softmax.html index fb4b77095..73ff6b53c 100644 --- a/docs/build/html/python/_autosummary/mlx.core.softmax.html +++ b/docs/build/html/python/_autosummary/mlx.core.softmax.html @@ -8,7 +8,7 @@ - mlx.core.softmax — MLX 0.21.1 documentation + mlx.core.softmax — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    mlx.core.unflatten

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    mlx.core.unflatten#

    +
    +
    +unflatten(a: array, /, axis: int, shape: Sequence[int], *, stream: None | Stream | Device = None) array#
    +

    Unflatten an axis of an array to a shape.

    +
    +
    Parameters:
    +
      +
    • a (array) – Input array.

    • +
    • axis (int) – The axis to unflatten.

    • +
    • shape (tuple(int)) – The shape to unflatten to. At most one +entry can be -1 in which case the corresponding size will be +inferred.

    • +
    • stream (Stream, optional) – Stream or device. Defaults to None +in which case the default stream of the default device is used.

    • +
    +
    +
    Returns:
    +

    The unflattened array.

    +
    +
    Return type:
    +

    array

    +
    +
    +

    Example

    +
    >>> a = mx.array([1, 2, 3, 4])
    +>>> mx.unflatten(a, 0, (2, -1))
    +array([[1, 2], [3, 4]], dtype=int32)
    +
    +
    +
    + +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/_autosummary/mlx.core.value_and_grad.html b/docs/build/html/python/_autosummary/mlx.core.value_and_grad.html index f65314a0e..4095dc20d 100644 --- a/docs/build/html/python/_autosummary/mlx.core.value_and_grad.html +++ b/docs/build/html/python/_autosummary/mlx.core.value_and_grad.html @@ -8,7 +8,7 @@ - mlx.core.value_and_grad — MLX 0.21.1 documentation + mlx.core.value_and_grad — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    Export Functions

    + +
    +
    + +
    +
    +
    + + + + +
    + +
    +

    Export Functions#

    +
    + + + + + + + + + + + + + + +

    export_function(file, fun, *args[, shapeless])

    Export a function to a file.

    import_function(file)

    Import a function from a file.

    exporter(file, fun, *[, shapeless])

    Make a callable object to export multiple traces of a function to a file.

    export_to_dot(file, *args, **kwargs)

    Export a graph to DOT format for visualization.

    +
    +
    + + +
    + + + + + + + + +
    + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/python/fast.html b/docs/build/html/python/fast.html index 37c30e5a3..e1d85b2fb 100644 --- a/docs/build/html/python/fast.html +++ b/docs/build/html/python/fast.html @@ -8,7 +8,7 @@ - Fast — MLX 0.21.1 documentation + Fast — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + +
    + + + + + + + + + + + +
    + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    Exporting Functions#

    +

    MLX has an API to export and import functions to and from a file. This lets you +run computations written in one MLX front-end (e.g. Python) in another MLX +front-end (e.g. C++).

    +

    This guide walks through the basics of the MLX export API with some examples. +To see the full list of functions check-out the API documentation.

    +
    +

    Basics of Exporting#

    +

    Let’s start with a simple example:

    +
    def fun(x, y):
    +  return x + y
    +
    +x = mx.array(1.0)
    +y = mx.array(1.0)
    +mx.export_function("add.mlxfn", fun, x, y)
    +
    +
    +

    To export a function, provide sample input arrays that the function +can be called with. The data doesn’t matter, but the shapes and types of the +arrays do. In the above example we exported fun with two float32 +scalar arrays. We can then import the function and run it:

    +
    add_fun = mx.import_function("add.mlxfn")
    +
    +out, = add_fun(mx.array(1.0), mx.array(2.0))
    +# Prints: array(3, dtype=float32)
    +print(out)
    +
    +out, = add_fun(mx.array(1.0), mx.array(3.0))
    +# Prints: array(4, dtype=float32)
    +print(out)
    +
    +# Raises an exception
    +add_fun(mx.array(1), mx.array(3.0))
    +
    +# Raises an exception
    +add_fun(mx.array([1.0, 2.0]), mx.array(3.0))
    +
    +
    +

    Notice the third and fourth calls to add_fun raise exceptions because the +shapes and types of the inputs are different than the shapes and types of the +example inputs we exported the function with.

    +

    Also notice that even though the original fun returns a single output +array, the imported function always returns a tuple of one or more arrays.

    +

    The inputs to export_function() and to an imported function can be +specified as variable positional arguments or as a tuple of arrays:

    +
    def fun(x, y):
    +  return x + y
    +
    +x = mx.array(1.0)
    +y = mx.array(1.0)
    +
    +# Both arguments to fun are positional
    +mx.export_function("add.mlxfn", fun, x, y)
    +
    +# Same as above
    +mx.export_function("add.mlxfn", fun, (x, y))
    +
    +imported_fun = mx.import_function("add.mlxfn")
    +
    +# Ok
    +out, = imported_fun(x, y)
    +
    +# Also ok
    +out, = imported_fun((x, y))
    +
    +
    +

    You can pass example inputs to functions as positional or keyword arguments. If +you use keyword arguments to export the function, then you have to use the same +keyword arguments when calling the imported function.

    +
    def fun(x, y):
    +  return x + y
    +
    +# One argument to fun is positional, the other is a kwarg
    +mx.export_function("add.mlxfn", fun, x, y=y)
    +
    +imported_fun = mx.import_function("add.mlxfn")
    +
    +# Ok
    +out, = imported_fun(x, y=y)
    +
    +# Also ok
    +out, = imported_fun((x,), {"y": y})
    +
    +# Raises since the keyword argument is missing
    +out, = imported_fun(x, y)
    +
    +# Raises since the keyword argument has the wrong key
    +out, = imported_fun(x, z=y)
    +
    +
    +
    +
    +

    Exporting Modules#

    +

    An mlx.nn.Module can be exported with or without the parameters included +in the exported function. Here’s an example:

    +
    model = nn.Linear(4, 4)
    +mx.eval(model.parameters())
    +
    +def call(x):
    +   return model(x)
    +
    +mx.export_function("model.mlxfn", call, mx.zeros(4))
    +
    +
    +

    In the above example, the mlx.nn.Linear module is exported. Its +parameters are also saved to the model.mlxfn file.

    +
    +

    Note

    +

    For enclosed arrays inside an exported function, be extra careful to ensure +they are evaluated. The computation graph that gets exported will include +the computation that produces enclosed inputs.

    +

    If the above example was missing mx.eval(model.parameters(), the +exported function would include the random initialization of the +mlx.nn.Module parameters.

    +
    +

    If you only want to export the Module.__call__ function without the +parameters, pass them as inputs to the call wrapper:

    +
    model = nn.Linear(4, 4)
    +mx.eval(model.parameters())
    +
    +def call(x, **params):
    +  # Set the model's parameters to the input parameters
    +  model.update(tree_unflatten(list(params.items())))
    +  return model(x)
    +
    +params = dict(tree_flatten(model.parameters()))
    +mx.export_function("model.mlxfn", call, (mx.zeros(4),), params)
    +
    +
    +
    +
    +

    Shapeless Exports#

    +

    Just like compile(), functions can also be exported for dynamically shaped +inputs. Pass shapeless=True to export_function() or exporter() +to export a function which can be used for inputs with variable shapes:

    +
    mx.export_function("fun.mlxfn", mx.abs, mx.array(0.0), shapeless=True)
    +imported_abs = mx.import_function("fun.mlxfn")
    +
    +# Ok
    +out, = imported_abs(mx.array(-1.0))
    +
    +# Also ok
    +out, = imported_abs(mx.array([-1.0, -2.0]))
    +
    +
    +

    With shapeless=False (which is the default), the second call to +imported_abs would raise an exception with a shape mismatch.

    +

    Shapeless exporting works the same as shapeless compilation and should be +used carefully. See the documentation on shapeless compilation for more information.

    +
    +
    +

    Exporting Multiple Traces#

    +

    In some cases, functions build different computation graphs for different +input arguments. A simple way to manage this is to export to a new file with +each set of inputs. This is a fine option in many cases. But it can be +suboptimal if the exported functions have a large amount of duplicate constant +data (for example the parameters of a mlx.nn.Module).

    +

    The export API in MLX lets you export multiple traces of the same function to +a single file by creating an exporting context manager with exporter():

    +
    def fun(x, y=None):
    +    constant = mx.array(3.0)
    +    if y is not None:
    +      x += y
    +    return x + constant
    +
    +with mx.exporter("fun.mlxfn", fun) as exporter:
    +    exporter(mx.array(1.0))
    +    exporter(mx.array(1.0), y=mx.array(0.0))
    +
    +imported_function = mx.import_function("fun.mlxfn")
    +
    +# Call the function with y=None
    +out, = imported_function(mx.array(1.0))
    +print(out)
    +
    +# Call the function with y specified
    +out, = imported_function(mx.array(1.0), y=mx.array(1.0))
    +print(out)
    +
    +
    +

    In the above example the function constant data, (i.e. constant), is only +saved once.

    +
    +
    +

    Transformations with Imported Functions#

    +

    Function transformations like grad(), vmap(), and compile() work +on imported functions just like regular Python functions:

    +
    def fun(x):
    +    return mx.sin(x)
    +
    +x = mx.array(0.0)
    +mx.export_function("sine.mlxfn", fun, x)
    +
    +imported_fun = mx.import_function("sine.mlxfn")
    +
    +# Take the derivative of the imported function
    +dfdx = mx.grad(lambda x: imported_fun(x)[0])
    +# Prints: array(1, dtype=float32)
    +print(dfdx(x))
    +
    +# Compile the imported function
    +mx.compile(imported_fun)
    +# Prints: array(0, dtype=float32)
    +print(compiled_fun(x)[0])
    +
    +
    +
    +
    +

    Importing Functions in C++#

    +

    Importing and running functions in C++ is basically the same as importing and +running them in Python. First, follow the instructions to +setup a simple C++ project that uses MLX as a library.

    +

    Next, export a simple function from Python:

    +
    def fun(x, y):
    +    return mx.exp(x + y)
    +
    +x = mx.array(1.0)
    +y = mx.array(1.0)
    +mx.export_function("fun.mlxfn", fun, x, y)
    +
    +
    +

    Import and run the function in C++ with only a few lines of code:

    +
    auto fun = mx::import_function("fun.mlxfn");
    +
    +auto inputs = {mx::array(1.0), mx::array(1.0)};
    +auto outputs = fun(inputs);
    +
    +// Prints: array(2, dtype=float32)
    +std::cout << outputs[0] << std::endl;
    +
    +
    +

    Imported functions can be transformed in C++ just like in Python. Use +std::vector<mx::array> for positional arguments and std::map<std::string, +mx::array> for keyword arguments when calling imported functions in C++.

    +
    +
    +

    More Examples#

    +

    Here are a few more complete examples exporting more complex functions from +Python and importing and running them in C++:

    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/docs/build/html/usage/function_transforms.html b/docs/build/html/usage/function_transforms.html index ad1ffac65..c87c980ec 100644 --- a/docs/build/html/usage/function_transforms.html +++ b/docs/build/html/usage/function_transforms.html @@ -8,7 +8,7 @@ - Function Transforms — MLX 0.21.1 documentation + Function Transforms — MLX 0.22.0 documentation @@ -16,8 +16,8 @@ document.documentElement.dataset.mode = localStorage.getItem("mode") || ""; document.documentElement.dataset.theme = localStorage.getItem("theme") || ""; -