CMakeLists.txt LICENSE MANIFEST.in README.md mlx.pc.in pyproject.toml setup.py cmake/FindNCCL.cmake cmake/extension.cmake mlx/CMakeLists.txt mlx/allocator.cpp mlx/allocator.h mlx/array.cpp mlx/array.h mlx/compile.cpp mlx/compile.h mlx/compile_impl.h mlx/device.cpp mlx/device.h mlx/dtype.cpp mlx/dtype.h mlx/dtype_utils.cpp mlx/dtype_utils.h mlx/einsum.cpp mlx/einsum.h mlx/event.h mlx/export.cpp mlx/export.h mlx/export_impl.h mlx/fast.cpp mlx/fast.h mlx/fast_primitives.h mlx/fence.h mlx/fft.cpp mlx/fft.h mlx/graph_utils.cpp mlx/graph_utils.h mlx/io.h mlx/linalg.cpp mlx/linalg.h mlx/memory.h mlx/mlx.h mlx/ops.cpp mlx/ops.h mlx/primitives.cpp mlx/primitives.h mlx/random.cpp mlx/random.h mlx/scheduler.cpp mlx/scheduler.h mlx/small_vector.h mlx/stream.h mlx/threadpool.h mlx/transforms.cpp mlx/transforms.h mlx/transforms_impl.h mlx/utils.cpp mlx/utils.h mlx/version.cpp mlx/version.h mlx/3rdparty/.clang-format mlx/3rdparty/pocketfft.h mlx/backend/common/CMakeLists.txt mlx/backend/common/binary.h mlx/backend/common/broadcasting.cpp mlx/backend/common/broadcasting.h mlx/backend/common/buffer_cache.h mlx/backend/common/common.cpp mlx/backend/common/compiled.cpp mlx/backend/common/compiled.h mlx/backend/common/copy.h mlx/backend/common/hadamard.h mlx/backend/common/load.cpp mlx/backend/common/matmul.h mlx/backend/common/reduce.cpp mlx/backend/common/reduce.h mlx/backend/common/slicing.cpp mlx/backend/common/slicing.h mlx/backend/common/ternary.h mlx/backend/common/unary.h mlx/backend/common/utils.cpp mlx/backend/common/utils.h mlx/backend/cpu/CMakeLists.txt mlx/backend/cpu/arange.h mlx/backend/cpu/arg_reduce.cpp mlx/backend/cpu/available.cpp mlx/backend/cpu/available.h mlx/backend/cpu/binary.cpp mlx/backend/cpu/binary.h mlx/backend/cpu/binary_ops.h mlx/backend/cpu/binary_two.h mlx/backend/cpu/cholesky.cpp mlx/backend/cpu/compiled.cpp mlx/backend/cpu/compiled_preamble.h mlx/backend/cpu/conv.cpp mlx/backend/cpu/copy.cpp mlx/backend/cpu/copy.h mlx/backend/cpu/distributed.cpp mlx/backend/cpu/eig.cpp mlx/backend/cpu/eigh.cpp mlx/backend/cpu/encoder.cpp mlx/backend/cpu/encoder.h mlx/backend/cpu/eval.cpp mlx/backend/cpu/eval.h mlx/backend/cpu/fft.cpp mlx/backend/cpu/gemm.h mlx/backend/cpu/hadamard.cpp mlx/backend/cpu/indexing.cpp mlx/backend/cpu/inverse.cpp mlx/backend/cpu/jit_compiler.cpp mlx/backend/cpu/jit_compiler.h mlx/backend/cpu/lapack.h mlx/backend/cpu/logsumexp.cpp mlx/backend/cpu/luf.cpp mlx/backend/cpu/make_compiled_preamble.ps1 mlx/backend/cpu/make_compiled_preamble.sh mlx/backend/cpu/masked_mm.cpp mlx/backend/cpu/matmul.cpp mlx/backend/cpu/primitives.cpp mlx/backend/cpu/qrf.cpp mlx/backend/cpu/quantized.cpp mlx/backend/cpu/reduce.cpp mlx/backend/cpu/scan.cpp mlx/backend/cpu/select.cpp mlx/backend/cpu/slicing.h mlx/backend/cpu/softmax.cpp mlx/backend/cpu/sort.cpp mlx/backend/cpu/svd.cpp mlx/backend/cpu/ternary.h mlx/backend/cpu/threefry.cpp mlx/backend/cpu/threefry.h mlx/backend/cpu/unary.cpp mlx/backend/cpu/unary.h mlx/backend/cpu/unary_ops.h mlx/backend/cpu/gemms/bnns.cpp mlx/backend/cpu/gemms/cblas.cpp mlx/backend/cpu/gemms/simd_bf16.cpp mlx/backend/cpu/gemms/simd_fp16.cpp mlx/backend/cpu/gemms/simd_gemm.h mlx/backend/cpu/simd/accelerate_fp16_simd.h mlx/backend/cpu/simd/accelerate_simd.h mlx/backend/cpu/simd/base_simd.h mlx/backend/cpu/simd/math.h mlx/backend/cpu/simd/neon_fp16_simd.h mlx/backend/cpu/simd/simd.h mlx/backend/cpu/simd/type.h mlx/backend/cuda/CMakeLists.txt mlx/backend/cuda/allocator.cpp mlx/backend/cuda/allocator.h mlx/backend/cuda/arange.cu mlx/backend/cuda/arg_reduce.cu mlx/backend/cuda/bin2h.cmake mlx/backend/cuda/binary_two.cu mlx/backend/cuda/compiled.cpp mlx/backend/cuda/conv.cpp mlx/backend/cuda/copy.cu mlx/backend/cuda/cuda.cpp mlx/backend/cuda/cuda.h mlx/backend/cuda/cudnn_utils.cpp mlx/backend/cuda/cudnn_utils.h mlx/backend/cuda/custom_kernel.cpp mlx/backend/cuda/device.cpp mlx/backend/cuda/device.h mlx/backend/cuda/distributed.cu mlx/backend/cuda/eval.cpp mlx/backend/cuda/event.cu mlx/backend/cuda/event.h mlx/backend/cuda/fence.cpp mlx/backend/cuda/indexing.cpp mlx/backend/cuda/jit_module.cpp mlx/backend/cuda/jit_module.h mlx/backend/cuda/kernel_utils.cu mlx/backend/cuda/kernel_utils.cuh mlx/backend/cuda/layer_norm.cu mlx/backend/cuda/logsumexp.cu mlx/backend/cuda/lru_cache.h mlx/backend/cuda/matmul.cpp mlx/backend/cuda/no_cuda.cpp mlx/backend/cuda/primitives.cpp mlx/backend/cuda/random.cu mlx/backend/cuda/reduce.cu mlx/backend/cuda/rms_norm.cu mlx/backend/cuda/rope.cu mlx/backend/cuda/scaled_dot_product_attention.cu mlx/backend/cuda/scan.cu mlx/backend/cuda/slicing.cpp mlx/backend/cuda/softmax.cu mlx/backend/cuda/sort.cu mlx/backend/cuda/ternary.cu mlx/backend/cuda/unary.cu mlx/backend/cuda/utils.cpp mlx/backend/cuda/utils.h mlx/backend/cuda/worker.cpp mlx/backend/cuda/worker.h mlx/backend/cuda/binary/CMakeLists.txt mlx/backend/cuda/binary/add.cu mlx/backend/cuda/binary/arctan2.cu mlx/backend/cuda/binary/binary.cuh mlx/backend/cuda/binary/bitwise_binary.cu mlx/backend/cuda/binary/divide.cu mlx/backend/cuda/binary/equal.cu mlx/backend/cuda/binary/greater.cu mlx/backend/cuda/binary/greater_equal.cu mlx/backend/cuda/binary/less.cu mlx/backend/cuda/binary/less_equal.cu mlx/backend/cuda/binary/log_add_exp.cu mlx/backend/cuda/binary/logical_and.cu mlx/backend/cuda/binary/logical_or.cu mlx/backend/cuda/binary/maximum.cu mlx/backend/cuda/binary/minimum.cu mlx/backend/cuda/binary/multiply.cu mlx/backend/cuda/binary/not_equal.cu mlx/backend/cuda/binary/power.cu mlx/backend/cuda/binary/remainder.cu mlx/backend/cuda/binary/subtract.cu mlx/backend/cuda/conv/conv.h mlx/backend/cuda/conv/gemm_conv.cu mlx/backend/cuda/conv/gemm_grouped_conv.cu mlx/backend/cuda/copy/copy.cuh mlx/backend/cuda/copy/copy_contiguous.cu mlx/backend/cuda/copy/copy_general.cu mlx/backend/cuda/copy/copy_general_dynamic.cu mlx/backend/cuda/copy/copy_general_input.cu mlx/backend/cuda/device/atomic_ops.cuh mlx/backend/cuda/device/binary_ops.cuh mlx/backend/cuda/device/cast_op.cuh mlx/backend/cuda/device/complex.cuh mlx/backend/cuda/device/config.h mlx/backend/cuda/device/fp16_math.cuh mlx/backend/cuda/device/gather.cuh mlx/backend/cuda/device/gather_axis.cuh mlx/backend/cuda/device/indexing.cuh mlx/backend/cuda/device/scatter.cuh mlx/backend/cuda/device/scatter_axis.cuh mlx/backend/cuda/device/scatter_ops.cuh mlx/backend/cuda/device/ternary_ops.cuh mlx/backend/cuda/device/unary_ops.cuh mlx/backend/cuda/device/utils.cuh mlx/backend/cuda/gemms/cublas_gemm.cpp mlx/backend/cuda/gemms/cublas_gemm.h mlx/backend/cuda/gemms/cublas_gemm_batched_12_0.cpp mlx/backend/cuda/gemms/cublas_gemm_batched_12_9.cu mlx/backend/cuda/gemms/gemv.cu mlx/backend/cuda/gemms/gemv.h mlx/backend/cuda/quantized/affine_quantize.cu mlx/backend/cuda/quantized/quantized.cpp mlx/backend/cuda/quantized/quantized.h mlx/backend/cuda/quantized/quantized_utils.cuh mlx/backend/cuda/reduce/all_reduce.cu mlx/backend/cuda/reduce/col_reduce.cu mlx/backend/cuda/reduce/init_reduce.cu mlx/backend/cuda/reduce/reduce.cuh mlx/backend/cuda/reduce/reduce_ops.cuh mlx/backend/cuda/reduce/reduce_utils.cuh mlx/backend/cuda/reduce/row_reduce.cu mlx/backend/cuda/steel/defines.cuh mlx/backend/cuda/steel/gemm.cuh mlx/backend/cuda/steel/mma.cuh mlx/backend/cuda/steel/tiles.cuh mlx/backend/cuda/steel/utils.cuh mlx/backend/cuda/unary/CMakeLists.txt mlx/backend/cuda/unary/abs.cu mlx/backend/cuda/unary/arccos.cu mlx/backend/cuda/unary/arccosh.cu mlx/backend/cuda/unary/arcsin.cu mlx/backend/cuda/unary/arcsinh.cu mlx/backend/cuda/unary/arctan.cu mlx/backend/cuda/unary/arctanh.cu mlx/backend/cuda/unary/bitwise_invert.cu mlx/backend/cuda/unary/ceil.cu mlx/backend/cuda/unary/conjugate.cu mlx/backend/cuda/unary/cos.cu mlx/backend/cuda/unary/cosh.cu mlx/backend/cuda/unary/erf.cu mlx/backend/cuda/unary/erf_inv.cu mlx/backend/cuda/unary/exp.cu mlx/backend/cuda/unary/expm1.cu mlx/backend/cuda/unary/floor.cu mlx/backend/cuda/unary/imag.cu mlx/backend/cuda/unary/log.cu mlx/backend/cuda/unary/log1p.cu mlx/backend/cuda/unary/logical_not.cu mlx/backend/cuda/unary/negative.cu mlx/backend/cuda/unary/real.cu mlx/backend/cuda/unary/round.cu mlx/backend/cuda/unary/sigmoid.cu mlx/backend/cuda/unary/sign.cu mlx/backend/cuda/unary/sin.cu mlx/backend/cuda/unary/sinh.cu mlx/backend/cuda/unary/sqrt.cu mlx/backend/cuda/unary/square.cu mlx/backend/cuda/unary/tan.cu mlx/backend/cuda/unary/tanh.cu mlx/backend/cuda/unary/unary.cuh mlx/backend/gpu/CMakeLists.txt mlx/backend/gpu/available.h mlx/backend/gpu/copy.cpp mlx/backend/gpu/copy.h mlx/backend/gpu/eval.h mlx/backend/gpu/primitives.cpp mlx/backend/gpu/slicing.cpp mlx/backend/gpu/slicing.h mlx/backend/metal/CMakeLists.txt mlx/backend/metal/allocator.cpp mlx/backend/metal/allocator.h mlx/backend/metal/binary.cpp mlx/backend/metal/binary.h mlx/backend/metal/compiled.cpp mlx/backend/metal/conv.cpp mlx/backend/metal/copy.cpp mlx/backend/metal/custom_kernel.cpp mlx/backend/metal/device.cpp mlx/backend/metal/device.h mlx/backend/metal/distributed.cpp mlx/backend/metal/eval.cpp mlx/backend/metal/event.cpp mlx/backend/metal/fence.cpp mlx/backend/metal/fft.cpp mlx/backend/metal/hadamard.cpp mlx/backend/metal/indexing.cpp mlx/backend/metal/jit_kernels.cpp mlx/backend/metal/kernels.h mlx/backend/metal/logsumexp.cpp mlx/backend/metal/make_compiled_preamble.sh mlx/backend/metal/matmul.cpp mlx/backend/metal/matmul.h mlx/backend/metal/metal.cpp mlx/backend/metal/metal.h mlx/backend/metal/no_metal.cpp mlx/backend/metal/nojit_kernels.cpp mlx/backend/metal/normalization.cpp mlx/backend/metal/primitives.cpp mlx/backend/metal/quantized.cpp mlx/backend/metal/reduce.cpp mlx/backend/metal/reduce.h mlx/backend/metal/resident.cpp mlx/backend/metal/resident.h mlx/backend/metal/rope.cpp mlx/backend/metal/scaled_dot_product_attention.cpp mlx/backend/metal/scan.cpp mlx/backend/metal/slicing.cpp mlx/backend/metal/softmax.cpp mlx/backend/metal/sort.cpp mlx/backend/metal/ternary.cpp mlx/backend/metal/ternary.h mlx/backend/metal/unary.cpp mlx/backend/metal/unary.h mlx/backend/metal/utils.cpp mlx/backend/metal/utils.h mlx/backend/metal/jit/includes.h mlx/backend/metal/jit/indexing.h mlx/backend/metal/kernels/CMakeLists.txt mlx/backend/metal/kernels/arange.h mlx/backend/metal/kernels/arange.metal mlx/backend/metal/kernels/arg_reduce.metal mlx/backend/metal/kernels/atomic.h mlx/backend/metal/kernels/bf16_math.h mlx/backend/metal/kernels/binary.h mlx/backend/metal/kernels/binary.metal mlx/backend/metal/kernels/binary_ops.h mlx/backend/metal/kernels/binary_two.h mlx/backend/metal/kernels/binary_two.metal mlx/backend/metal/kernels/cexpf.h mlx/backend/metal/kernels/complex.h mlx/backend/metal/kernels/conv.metal mlx/backend/metal/kernels/copy.h mlx/backend/metal/kernels/copy.metal mlx/backend/metal/kernels/defines.h mlx/backend/metal/kernels/erf.h mlx/backend/metal/kernels/expm1f.h mlx/backend/metal/kernels/fence.metal mlx/backend/metal/kernels/fft.h mlx/backend/metal/kernels/fft.metal mlx/backend/metal/kernels/fp4_quantized.h mlx/backend/metal/kernels/fp4_quantized.metal mlx/backend/metal/kernels/gemv.metal mlx/backend/metal/kernels/gemv_masked.h mlx/backend/metal/kernels/gemv_masked.metal mlx/backend/metal/kernels/hadamard.h mlx/backend/metal/kernels/layer_norm.metal mlx/backend/metal/kernels/logsumexp.h mlx/backend/metal/kernels/logsumexp.metal mlx/backend/metal/kernels/quantized.h mlx/backend/metal/kernels/quantized.metal mlx/backend/metal/kernels/quantized_utils.h mlx/backend/metal/kernels/random.metal mlx/backend/metal/kernels/reduce.h mlx/backend/metal/kernels/reduce.metal mlx/backend/metal/kernels/reduce_utils.h mlx/backend/metal/kernels/rms_norm.metal mlx/backend/metal/kernels/rope.metal mlx/backend/metal/kernels/scaled_dot_product_attention.metal mlx/backend/metal/kernels/scan.h mlx/backend/metal/kernels/scan.metal mlx/backend/metal/kernels/sdpa_vector.h mlx/backend/metal/kernels/softmax.h mlx/backend/metal/kernels/softmax.metal mlx/backend/metal/kernels/sort.h mlx/backend/metal/kernels/sort.metal mlx/backend/metal/kernels/ternary.h mlx/backend/metal/kernels/ternary.metal mlx/backend/metal/kernels/ternary_ops.h mlx/backend/metal/kernels/unary.h mlx/backend/metal/kernels/unary.metal mlx/backend/metal/kernels/unary_ops.h mlx/backend/metal/kernels/utils.h mlx/backend/metal/kernels/fft/radix.h mlx/backend/metal/kernels/fft/readwrite.h mlx/backend/metal/kernels/indexing/gather.h mlx/backend/metal/kernels/indexing/gather_axis.h mlx/backend/metal/kernels/indexing/gather_front.h mlx/backend/metal/kernels/indexing/indexing.h mlx/backend/metal/kernels/indexing/scatter.h mlx/backend/metal/kernels/indexing/scatter_axis.h mlx/backend/metal/kernels/jit/bf16.h mlx/backend/metal/kernels/metal_3_0/bf16.h mlx/backend/metal/kernels/metal_3_1/bf16.h mlx/backend/metal/kernels/reduction/ops.h mlx/backend/metal/kernels/reduction/reduce_all.h mlx/backend/metal/kernels/reduction/reduce_col.h mlx/backend/metal/kernels/reduction/reduce_init.h mlx/backend/metal/kernels/reduction/reduce_row.h mlx/backend/metal/kernels/steel/defines.h mlx/backend/metal/kernels/steel/utils.h mlx/backend/metal/kernels/steel/attn/attn.h mlx/backend/metal/kernels/steel/attn/loader.h mlx/backend/metal/kernels/steel/attn/mma.h mlx/backend/metal/kernels/steel/attn/params.h mlx/backend/metal/kernels/steel/attn/transforms.h mlx/backend/metal/kernels/steel/attn/kernels/steel_attention.h mlx/backend/metal/kernels/steel/attn/kernels/steel_attention.metal mlx/backend/metal/kernels/steel/conv/conv.h mlx/backend/metal/kernels/steel/conv/loader.h mlx/backend/metal/kernels/steel/conv/params.h mlx/backend/metal/kernels/steel/conv/kernels/steel_conv.h mlx/backend/metal/kernels/steel/conv/kernels/steel_conv.metal mlx/backend/metal/kernels/steel/conv/kernels/steel_conv_general.h mlx/backend/metal/kernels/steel/conv/kernels/steel_conv_general.metal mlx/backend/metal/kernels/steel/conv/loaders/loader_channel_l.h mlx/backend/metal/kernels/steel/conv/loaders/loader_channel_n.h mlx/backend/metal/kernels/steel/conv/loaders/loader_general.h mlx/backend/metal/kernels/steel/gemm/gemm.h mlx/backend/metal/kernels/steel/gemm/loader.h mlx/backend/metal/kernels/steel/gemm/mma.h mlx/backend/metal/kernels/steel/gemm/params.h mlx/backend/metal/kernels/steel/gemm/transforms.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_fused.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_fused.metal mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_gather.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_gather.metal mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_masked.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_masked.metal mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_segmented.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_segmented.metal mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_splitk.h mlx/backend/metal/kernels/steel/gemm/kernels/steel_gemm_splitk.metal mlx/backend/metal/kernels/steel/utils/integral_constant.h mlx/backend/metal/kernels/steel/utils/type_traits.h mlx/backend/no_cpu/CMakeLists.txt mlx/backend/no_cpu/available.cpp mlx/backend/no_cpu/compiled.cpp mlx/backend/no_cpu/primitives.cpp mlx/backend/no_gpu/CMakeLists.txt mlx/backend/no_gpu/allocator.cpp mlx/backend/no_gpu/apple_memory.h mlx/backend/no_gpu/eval.cpp mlx/backend/no_gpu/event.cpp mlx/backend/no_gpu/fence.cpp mlx/backend/no_gpu/linux_memory.h mlx/backend/no_gpu/primitives.cpp mlx/distributed/CMakeLists.txt mlx/distributed/distributed.cpp mlx/distributed/distributed.h mlx/distributed/distributed_impl.h mlx/distributed/ops.cpp mlx/distributed/ops.h mlx/distributed/primitives.cpp mlx/distributed/primitives.h mlx/distributed/mpi/CMakeLists.txt mlx/distributed/mpi/mpi.cpp mlx/distributed/mpi/mpi.h mlx/distributed/mpi/mpi_declarations.h mlx/distributed/mpi/no_mpi.cpp mlx/distributed/nccl/CMakeLists.txt mlx/distributed/nccl/nccl.cpp mlx/distributed/nccl/nccl.h mlx/distributed/nccl/no_nccl.cpp mlx/distributed/nccl/nccl_stub/CMakeLists.txt mlx/distributed/nccl/nccl_stub/nccl_stubs.cpp mlx/distributed/ring/CMakeLists.txt mlx/distributed/ring/no_ring.cpp mlx/distributed/ring/ring.cpp mlx/distributed/ring/ring.h mlx/io/CMakeLists.txt mlx/io/gguf.cpp mlx/io/gguf.h mlx/io/gguf_quants.cpp mlx/io/load.cpp mlx/io/load.h mlx/io/no_gguf.cpp mlx/io/no_safetensors.cpp mlx/io/safetensors.cpp mlx/types/bf16.h mlx/types/complex.h mlx/types/fp16.h mlx/types/half_types.h mlx/types/limits.h python/mlx/__main__.py python/mlx/_os_warning.py python/mlx/_reprlib_fix.py python/mlx/distributed_run.py python/mlx/extension.py python/mlx/py.typed python/mlx/utils.py python/mlx.egg-info/PKG-INFO python/mlx.egg-info/SOURCES.txt python/mlx.egg-info/dependency_links.txt python/mlx.egg-info/entry_points.txt python/mlx.egg-info/not-zip-safe python/mlx.egg-info/requires.txt python/mlx.egg-info/top_level.txt python/mlx/nn/__init__.py python/mlx/nn/init.py python/mlx/nn/losses.py python/mlx/nn/utils.py python/mlx/nn/layers/__init__.py python/mlx/nn/layers/activations.py python/mlx/nn/layers/base.py python/mlx/nn/layers/containers.py python/mlx/nn/layers/convolution.py python/mlx/nn/layers/convolution_transpose.py python/mlx/nn/layers/distributed.py python/mlx/nn/layers/dropout.py python/mlx/nn/layers/embedding.py python/mlx/nn/layers/linear.py python/mlx/nn/layers/normalization.py python/mlx/nn/layers/pooling.py python/mlx/nn/layers/positional_encoding.py python/mlx/nn/layers/quantized.py python/mlx/nn/layers/recurrent.py python/mlx/nn/layers/transformer.py python/mlx/nn/layers/upsample.py python/mlx/optimizers/__init__.py python/mlx/optimizers/optimizers.py python/mlx/optimizers/schedulers.py python/src/CMakeLists.txt python/src/array.cpp python/src/buffer.h python/src/constants.cpp python/src/convert.cpp python/src/convert.h python/src/cuda.cpp python/src/device.cpp python/src/distributed.cpp python/src/export.cpp python/src/fast.cpp python/src/fft.cpp python/src/indexing.cpp python/src/indexing.h python/src/linalg.cpp python/src/load.cpp python/src/load.h python/src/memory.cpp python/src/metal.cpp python/src/mlx.cpp python/src/mlx_func.cpp python/src/mlx_func.h python/src/ops.cpp python/src/random.cpp python/src/small_vector.h python/src/stream.cpp python/src/transforms.cpp python/src/trees.cpp python/src/trees.h python/src/utils.cpp python/src/utils.h