modelstudio 0.6.1__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {modelstudio-0.6.1/python/modelstudio.egg-info → modelstudio-0.7.0}/PKG-INFO +3 -2
- {modelstudio-0.6.1 → modelstudio-0.7.0}/README.md +2 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/backend-status.md +1 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/cuda.md +19 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/native-backend-roadmap.md +1 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/releasing.md +7 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/training.md +1 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/pyproject.toml +1 -1
- modelstudio-0.7.0/python/modelstudio/_version.py +1 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0/python/modelstudio.egg-info}/PKG-INFO +3 -2
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio.egg-info/SOURCES.txt +1 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/scripts/cuda_release_check.py +7 -1
- modelstudio-0.7.0/scripts/cuda_source_build_check.py +218 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_public_exports.py +2 -2
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_version.py +1 -1
- modelstudio-0.6.1/python/modelstudio/_version.py +0 -1
- {modelstudio-0.6.1 → modelstudio-0.7.0}/CMakeLists.txt +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/LICENSE +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/MANIFEST.in +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_attention.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_conv.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_creation.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_cuda_autograd.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_cuda_elementwise.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_cuda_matmul.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_dataloader.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_dropout.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_elementwise.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_manipulation.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_matmul.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_mlp.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/benchmarks/bench_trace.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/CMakeLists.txt +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/cpu_backend.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/cpu_backend.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/kernels/add.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/kernels/matmul.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/kernels/mul.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cpu/kernels/relu.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/README.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_backend.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_backend.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_context.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_context.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_kernels.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_memory.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_memory.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_stream.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/cuda_stream.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/kernels/elementwise.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/kernels/matmul.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/cuda/kernels/reductions.cu +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/oneapi/README.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/oneapi/oneapi_backend.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/oneapi/oneapi_backend.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/oneapi/sycl_memory.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/rocm/README.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/rocm/hip_memory.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/rocm/rocm_backend.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/backends/rocm/rocm_backend.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/bindings/cuda_bindings.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/bindings/python_bindings.cpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/device.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/dtype.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/error.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/shape.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/storage.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/core/tensor.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/dispatcher/backend.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/dispatcher/dispatcher.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/csrc/dispatcher/operator_registry.hpp +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/autograd.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/backend-architecture.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/checkpointing.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/comparison-ops.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/data.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/functional-api.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/linalg.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/metrics.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/modules.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/nn.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/numpy-interop.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/optimizers.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/random.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/randomness.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/serialization.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/tensor-api.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/tensor-creation.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/tensor-manipulation.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/docs/tracing.md +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/backend_status.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/checkpoint_resume.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/checkpoint_training.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/cuda_autograd_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/cuda_mlp_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/cuda_tensor_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/dropout_batchnorm.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/functional_training.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/metrics_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/numpy_interop.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/random_linalg_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/save_load.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/scheduler_training.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/tiny_transformer.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/tracing_demo.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/train_classifier.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/train_cnn_toy.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/examples/train_mlp.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/autograd/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/autograd/engine.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/autograd/function.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/autograd/grad_mode.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/backends/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/backends/cuda.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/backends/status.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/compile/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/compile/graph_capture.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/compile/ir.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/compile/passes.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/cuda/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/cuda/device.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/cuda/memory.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/cuda/streams.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/data/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/data/dataloader.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/data/dataset.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/device.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/dtypes.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/errors.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/interop.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/linalg.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/metrics/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/metrics/classification.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/activations.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/convolution.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/embedding.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/functional.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/init.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/linear.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/losses.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/module.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/normalization.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/parameter.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/pooling.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/transformer.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/nn/utils.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/comparison.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/creation.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/linalg.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/math.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/movement.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/ops/reductions.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/optim/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/optim/adamw.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/optim/lr_scheduler.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/optim/optimizer.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/optim/sgd.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/py.typed +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/random.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/runtime/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/runtime/backend.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/runtime/dispatcher.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/serialization.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/storage.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/tensor.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/testing/__init__.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio/testing/gradcheck.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio.egg-info/dependency_links.txt +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio.egg-info/requires.txt +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/python/modelstudio.egg-info/top_level.txt +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/scripts/smoke_test.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/setup.cfg +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_activations_more.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_attention.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_autograd.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_backend_status.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_batchnorm.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_buffers.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_checkpoint_helpers.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_clone_copy.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_comparison_ops.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_concat_stack.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_conv.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_creation_more.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_autograd.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_availability.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_matmul.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_memory.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_nn.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_ops.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_optim.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_reductions.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_cuda_tensor.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_data.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_data_split.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_dataloader_seed.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_dispatcher.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_dropout.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_dtype_conversion.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_embedding.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_functional.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_grad_clip.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_gradcheck.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_indexing.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_indexing_assignment.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_init.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_linalg.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_loss_reductions.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_losses.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_lr_scheduler.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_manipulation_ops.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_metrics.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_module_ergonomics.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_native_cpu_mode.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_nn.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_norms.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_numpy_interop.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_ops.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_optim.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_optimizer_param_groups.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_optimizer_state.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_pooling.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_random.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_random_namespace.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_reductions_axis.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_scalar_behavior.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_serialization.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_serialization_hardening.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_shape_ops.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_state_dict.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_tensor.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_trace.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_transformer.py +0 -0
- {modelstudio-0.6.1 → modelstudio-0.7.0}/tests/test_unary_ops.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modelstudio
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: An early-stage AI tensor framework with CPU tensors, autograd, and backend extension scaffolding.
|
|
5
5
|
Author: ModelStudio Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,7 +31,7 @@ Dynamic: license-file
|
|
|
31
31
|
|
|
32
32
|
# ModelStudio
|
|
33
33
|
|
|
34
|
-
ModelStudio is an early-stage AI tensor framework. Version `0.
|
|
34
|
+
ModelStudio is an early-stage AI tensor framework. Version `0.7.0` provides a
|
|
35
35
|
CPU tensor/autograd MVP with neural-network modules, optimizers, serialization,
|
|
36
36
|
data loading, graph tracing metadata, backend status inspection, a public CUDA
|
|
37
37
|
availability namespace, and small LLM-oriented building blocks.
|
|
@@ -242,6 +242,7 @@ python benchmarks/bench_cuda_elementwise.py
|
|
|
242
242
|
python benchmarks/bench_cuda_matmul.py
|
|
243
243
|
python benchmarks/bench_cuda_autograd.py
|
|
244
244
|
python scripts/cuda_release_check.py
|
|
245
|
+
python scripts/cuda_source_build_check.py
|
|
245
246
|
```
|
|
246
247
|
|
|
247
248
|
## Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ModelStudio
|
|
2
2
|
|
|
3
|
-
ModelStudio is an early-stage AI tensor framework. Version `0.
|
|
3
|
+
ModelStudio is an early-stage AI tensor framework. Version `0.7.0` provides a
|
|
4
4
|
CPU tensor/autograd MVP with neural-network modules, optimizers, serialization,
|
|
5
5
|
data loading, graph tracing metadata, backend status inspection, a public CUDA
|
|
6
6
|
availability namespace, and small LLM-oriented building blocks.
|
|
@@ -211,6 +211,7 @@ python benchmarks/bench_cuda_elementwise.py
|
|
|
211
211
|
python benchmarks/bench_cuda_matmul.py
|
|
212
212
|
python benchmarks/bench_cuda_autograd.py
|
|
213
213
|
python scripts/cuda_release_check.py
|
|
214
|
+
python scripts/cuda_source_build_check.py
|
|
214
215
|
```
|
|
215
216
|
|
|
216
217
|
## Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Backend Status
|
|
2
2
|
|
|
3
|
-
ModelStudio 0.
|
|
3
|
+
ModelStudio 0.7.0 keeps CPU as the only available runtime backend in the
|
|
4
4
|
default PyPI package. It also exposes a public CUDA status namespace so users
|
|
5
5
|
can check accelerator availability without importing optional native artifacts.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CUDA Status
|
|
2
2
|
|
|
3
|
-
ModelStudio 0.
|
|
3
|
+
ModelStudio 0.7.0 includes a public CUDA availability namespace and native scaffold,
|
|
4
4
|
but the default `modelstudio` PyPI package remains CPU-only.
|
|
5
5
|
|
|
6
6
|
```python
|
|
@@ -54,6 +54,18 @@ cmake -S . -B build-cuda -DMODELSTUDIO_ENABLE_CUDA=ON
|
|
|
54
54
|
If the CUDA compiler or toolkit is missing, configuration fails clearly instead
|
|
55
55
|
of silently producing a CPU-only build that looks CUDA-capable.
|
|
56
56
|
|
|
57
|
+
On Windows source checkouts, the helper below bootstraps missing Python-side
|
|
58
|
+
build tools such as the CMake wheel, runs CMake, and treats skipped CUDA tests
|
|
59
|
+
as a failure:
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
python scripts/cuda_source_build_check.py
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
If this fails with a C++ compiler or generator error, install Visual Studio
|
|
66
|
+
Build Tools with the C++ workload and rerun it from a shell where `nvcc --version`
|
|
67
|
+
works.
|
|
68
|
+
|
|
57
69
|
## Phase 7 Release Gate
|
|
58
70
|
|
|
59
71
|
The next CUDA execution release must be prepared on a machine where all of
|
|
@@ -86,6 +98,12 @@ CPU-only machines may still run the same tests, but CUDA execution tests should
|
|
|
86
98
|
skip with `CUDA unavailable`. That is useful development feedback, not release
|
|
87
99
|
evidence for CUDA execution.
|
|
88
100
|
|
|
101
|
+
For the same gate in one command from a source checkout:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
python scripts/cuda_source_build_check.py
|
|
105
|
+
```
|
|
106
|
+
|
|
89
107
|
## CUDA Examples And Benchmarks
|
|
90
108
|
|
|
91
109
|
The CUDA scripts are safe to run on CPU-only installs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Native Backend Roadmap
|
|
2
2
|
|
|
3
|
-
The Python runtime still uses NumPy CPU kernels in 0.
|
|
3
|
+
The Python runtime still uses NumPy CPU kernels in 0.7.0. The native C++ tree is
|
|
4
4
|
scaffolding for future backend work and is intentionally not wired into Python
|
|
5
5
|
dispatch yet.
|
|
6
6
|
|
|
@@ -55,6 +55,13 @@ python scripts/cuda_release_check.py
|
|
|
55
55
|
On the CUDA release machine those tests must run and pass. If they skip because
|
|
56
56
|
CUDA is unavailable, do not tag or publish the CUDA release.
|
|
57
57
|
|
|
58
|
+
From a source checkout, this one-command gate also bootstraps missing
|
|
59
|
+
Python-side build tools such as the CMake wheel and fails if CUDA tests skip:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python scripts/cuda_source_build_check.py
|
|
63
|
+
```
|
|
64
|
+
|
|
58
65
|
## Build Distributions
|
|
59
66
|
|
|
60
67
|
Start from clean build outputs:
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "modelstudio"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.7.0"
|
|
8
8
|
description = "An early-stage AI tensor framework with CPU tensors, autograd, and backend extension scaffolding."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modelstudio
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: An early-stage AI tensor framework with CPU tensors, autograd, and backend extension scaffolding.
|
|
5
5
|
Author: ModelStudio Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,7 +31,7 @@ Dynamic: license-file
|
|
|
31
31
|
|
|
32
32
|
# ModelStudio
|
|
33
33
|
|
|
34
|
-
ModelStudio is an early-stage AI tensor framework. Version `0.
|
|
34
|
+
ModelStudio is an early-stage AI tensor framework. Version `0.7.0` provides a
|
|
35
35
|
CPU tensor/autograd MVP with neural-network modules, optimizers, serialization,
|
|
36
36
|
data loading, graph tracing metadata, backend status inspection, a public CUDA
|
|
37
37
|
availability namespace, and small LLM-oriented building blocks.
|
|
@@ -242,6 +242,7 @@ python benchmarks/bench_cuda_elementwise.py
|
|
|
242
242
|
python benchmarks/bench_cuda_matmul.py
|
|
243
243
|
python benchmarks/bench_cuda_autograd.py
|
|
244
244
|
python scripts/cuda_release_check.py
|
|
245
|
+
python scripts/cuda_source_build_check.py
|
|
245
246
|
```
|
|
246
247
|
|
|
247
248
|
## Documentation
|
|
@@ -166,6 +166,7 @@ python/modelstudio/runtime/dispatcher.py
|
|
|
166
166
|
python/modelstudio/testing/__init__.py
|
|
167
167
|
python/modelstudio/testing/gradcheck.py
|
|
168
168
|
scripts/cuda_release_check.py
|
|
169
|
+
scripts/cuda_source_build_check.py
|
|
169
170
|
scripts/smoke_test.py
|
|
170
171
|
tests/test_activations_more.py
|
|
171
172
|
tests/test_attention.py
|
|
@@ -5,8 +5,14 @@ import shutil
|
|
|
5
5
|
import subprocess
|
|
6
6
|
import sys
|
|
7
7
|
from collections.abc import Sequence
|
|
8
|
+
from pathlib import Path
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
_ROOT = Path(__file__).resolve().parents[1]
|
|
11
|
+
_PYTHON_SRC = _ROOT / "python"
|
|
12
|
+
if _PYTHON_SRC.exists():
|
|
13
|
+
sys.path.insert(0, str(_PYTHON_SRC))
|
|
14
|
+
|
|
15
|
+
import modelstudio as ms # noqa: E402
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
def _run_probe(command: Sequence[str]) -> int:
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import importlib.util
|
|
5
|
+
import os
|
|
6
|
+
import re
|
|
7
|
+
import shutil
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
import sysconfig
|
|
11
|
+
from collections.abc import Sequence
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
15
|
+
DEFAULT_BUILD_DIR = ROOT / "build-cuda"
|
|
16
|
+
CUDA_TESTS = [
|
|
17
|
+
"tests/test_cuda_availability.py",
|
|
18
|
+
"tests/test_cuda_tensor.py",
|
|
19
|
+
"tests/test_cuda_ops.py",
|
|
20
|
+
"tests/test_cuda_reductions.py",
|
|
21
|
+
"tests/test_cuda_matmul.py",
|
|
22
|
+
"tests/test_cuda_autograd.py",
|
|
23
|
+
"tests/test_cuda_optim.py",
|
|
24
|
+
"tests/test_cuda_nn.py",
|
|
25
|
+
"tests/test_cuda_memory.py",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class CheckFailed(RuntimeError):
|
|
30
|
+
"""Raised when the CUDA source validation gate cannot complete."""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _scripts_dir() -> Path:
|
|
34
|
+
return Path(sysconfig.get_path("scripts"))
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _command_name(name: str) -> str:
|
|
38
|
+
return f"{name}.exe" if os.name == "nt" else name
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _resolve_command(name: str) -> str | None:
|
|
42
|
+
path_command = shutil.which(name)
|
|
43
|
+
if path_command is not None:
|
|
44
|
+
return path_command
|
|
45
|
+
|
|
46
|
+
scripts_command = _scripts_dir() / _command_name(name)
|
|
47
|
+
if scripts_command.exists():
|
|
48
|
+
return str(scripts_command)
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _format_command(command: Sequence[str | Path]) -> str:
|
|
53
|
+
return " ".join(str(part) for part in command)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _run(
|
|
57
|
+
command: Sequence[str | Path],
|
|
58
|
+
*,
|
|
59
|
+
cwd: Path = ROOT,
|
|
60
|
+
env: dict[str, str] | None = None,
|
|
61
|
+
capture: bool = False,
|
|
62
|
+
) -> subprocess.CompletedProcess[str]:
|
|
63
|
+
print(f"$ {_format_command(command)}")
|
|
64
|
+
completed = subprocess.run(
|
|
65
|
+
[str(part) for part in command],
|
|
66
|
+
cwd=cwd,
|
|
67
|
+
env=env,
|
|
68
|
+
check=False,
|
|
69
|
+
text=True,
|
|
70
|
+
stdout=subprocess.PIPE if capture else None,
|
|
71
|
+
stderr=subprocess.STDOUT if capture else None,
|
|
72
|
+
)
|
|
73
|
+
if capture and completed.stdout:
|
|
74
|
+
print(completed.stdout.rstrip())
|
|
75
|
+
return completed
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _require_command(command: str, hint: str) -> None:
|
|
79
|
+
resolved = _resolve_command(command)
|
|
80
|
+
if resolved is None:
|
|
81
|
+
raise CheckFailed(f"{command} was not found. {hint}")
|
|
82
|
+
probe_command = [resolved, "--version"] if command == "nvcc" else [resolved]
|
|
83
|
+
completed = _run(probe_command)
|
|
84
|
+
if completed.returncode != 0:
|
|
85
|
+
raise CheckFailed(f"{command} exists but returned exit code {completed.returncode}.")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _python_package_available(module_name: str) -> bool:
|
|
89
|
+
return importlib.util.find_spec(module_name) is not None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _bootstrap_build_tools(args: argparse.Namespace) -> None:
|
|
93
|
+
missing: list[str] = []
|
|
94
|
+
if _resolve_command("cmake") is None:
|
|
95
|
+
missing.append("cmake>=3.24")
|
|
96
|
+
if not _python_package_available("pytest"):
|
|
97
|
+
missing.append("pytest>=8")
|
|
98
|
+
if not _python_package_available("numpy"):
|
|
99
|
+
missing.append("numpy>=1.26")
|
|
100
|
+
if args.generator and args.generator.lower() == "ninja" and _resolve_command("ninja") is None:
|
|
101
|
+
missing.append("ninja")
|
|
102
|
+
|
|
103
|
+
if not missing:
|
|
104
|
+
return
|
|
105
|
+
if args.no_bootstrap:
|
|
106
|
+
raise CheckFailed(f"Missing build tools: {', '.join(missing)}")
|
|
107
|
+
|
|
108
|
+
print("Installing missing Python build tools into the active environment:")
|
|
109
|
+
completed = _run([sys.executable, "-m", "pip", "install", "-U", *missing])
|
|
110
|
+
if completed.returncode != 0:
|
|
111
|
+
raise CheckFailed("Failed to install missing Python build tools.")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _validation_env(build_dir: Path) -> dict[str, str]:
|
|
115
|
+
env = os.environ.copy()
|
|
116
|
+
existing_path = env.get("PATH", "")
|
|
117
|
+
env["PATH"] = os.pathsep.join([str(_scripts_dir()), existing_path]) if existing_path else str(_scripts_dir())
|
|
118
|
+
|
|
119
|
+
pythonpath_parts = [
|
|
120
|
+
ROOT / "python",
|
|
121
|
+
build_dir,
|
|
122
|
+
build_dir / "Release",
|
|
123
|
+
build_dir / "Debug",
|
|
124
|
+
build_dir / "csrc",
|
|
125
|
+
build_dir / "csrc" / "Release",
|
|
126
|
+
build_dir / "csrc" / "Debug",
|
|
127
|
+
]
|
|
128
|
+
existing_pythonpath = env.get("PYTHONPATH")
|
|
129
|
+
if existing_pythonpath:
|
|
130
|
+
pythonpath_parts.append(Path(existing_pythonpath))
|
|
131
|
+
env["PYTHONPATH"] = os.pathsep.join(str(part) for part in pythonpath_parts)
|
|
132
|
+
return env
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _configure_and_build(args: argparse.Namespace, cmake: str, env: dict[str, str]) -> None:
|
|
136
|
+
configure_command: list[str | Path] = [
|
|
137
|
+
cmake,
|
|
138
|
+
"-S",
|
|
139
|
+
ROOT,
|
|
140
|
+
"-B",
|
|
141
|
+
args.build_dir,
|
|
142
|
+
"-DMODELSTUDIO_ENABLE_CUDA=ON",
|
|
143
|
+
]
|
|
144
|
+
if args.generator:
|
|
145
|
+
configure_command.extend(["-G", args.generator])
|
|
146
|
+
|
|
147
|
+
configure = _run(configure_command, env=env)
|
|
148
|
+
if configure.returncode != 0:
|
|
149
|
+
raise CheckFailed(
|
|
150
|
+
"CMake CUDA configure failed. On Windows, install CMake or let this script bootstrap it; "
|
|
151
|
+
"install Visual Studio Build Tools with the C++ workload; and run from a shell where nvcc works."
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
build = _run([cmake, "--build", args.build_dir, "--config", args.config], env=env)
|
|
155
|
+
if build.returncode != 0:
|
|
156
|
+
raise CheckFailed("CMake CUDA build failed.")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def _run_cuda_tests(env: dict[str, str]) -> None:
|
|
160
|
+
completed = _run([sys.executable, "-m", "pytest", "-q", "-rs", *CUDA_TESTS], env=env, capture=True)
|
|
161
|
+
if completed.returncode != 0:
|
|
162
|
+
raise CheckFailed("CUDA pytest gate failed.")
|
|
163
|
+
|
|
164
|
+
output = completed.stdout or ""
|
|
165
|
+
skipped_match = re.search(r"(?P<count>\d+)\s+skipped", output, flags=re.IGNORECASE)
|
|
166
|
+
if skipped_match and int(skipped_match.group("count")) > 0:
|
|
167
|
+
raise CheckFailed(
|
|
168
|
+
"CUDA tests skipped. That means ModelStudio's Python runtime did not see an available CUDA backend."
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def _run_release_check(env: dict[str, str]) -> None:
|
|
173
|
+
completed = _run([sys.executable, "scripts/cuda_release_check.py"], env=env)
|
|
174
|
+
if completed.returncode != 0:
|
|
175
|
+
raise CheckFailed("Strict CUDA release check failed.")
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def parse_args() -> argparse.Namespace:
|
|
179
|
+
parser = argparse.ArgumentParser(description="Validate a ModelStudio source checkout on a CUDA machine.")
|
|
180
|
+
parser.add_argument("--build-dir", type=Path, default=DEFAULT_BUILD_DIR)
|
|
181
|
+
parser.add_argument("--config", default="Release")
|
|
182
|
+
parser.add_argument("--generator", help="Optional CMake generator, for example Ninja.")
|
|
183
|
+
parser.add_argument("--no-bootstrap", action="store_true", help="Do not install missing Python build tools.")
|
|
184
|
+
parser.add_argument(
|
|
185
|
+
"--skip-cmake-build",
|
|
186
|
+
action="store_true",
|
|
187
|
+
help="Only run the Python CUDA tests and release check.",
|
|
188
|
+
)
|
|
189
|
+
return parser.parse_args()
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def main() -> int:
|
|
193
|
+
args = parse_args()
|
|
194
|
+
try:
|
|
195
|
+
print("ModelStudio CUDA source validation")
|
|
196
|
+
print("This validates real CUDA availability; skipped CUDA tests are treated as a failure.")
|
|
197
|
+
_require_command("nvidia-smi", "Install an NVIDIA driver and make sure nvidia-smi is on PATH.")
|
|
198
|
+
_require_command("nvcc", "Install the CUDA Toolkit and make sure nvcc is on PATH.")
|
|
199
|
+
_bootstrap_build_tools(args)
|
|
200
|
+
cmake = _resolve_command("cmake")
|
|
201
|
+
if cmake is None:
|
|
202
|
+
raise CheckFailed("cmake was not found after bootstrapping.")
|
|
203
|
+
|
|
204
|
+
env = _validation_env(args.build_dir)
|
|
205
|
+
if not args.skip_cmake_build:
|
|
206
|
+
_configure_and_build(args, cmake, env)
|
|
207
|
+
_run_cuda_tests(env)
|
|
208
|
+
_run_release_check(env)
|
|
209
|
+
except Exception as exc: # noqa: BLE001
|
|
210
|
+
print(f"CUDA source validation failed: {exc}", file=sys.stderr)
|
|
211
|
+
return 1
|
|
212
|
+
|
|
213
|
+
print("CUDA source validation passed.")
|
|
214
|
+
return 0
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
raise SystemExit(main())
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.6.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|