Skip to content

Commit

Permalink
Merge branch 'experimental' of https://github.com/Mojo-Numerics-and-A…
Browse files Browse the repository at this point in the history
  • Loading branch information
forFudan committed Sep 11, 2024
2 parents 3fd7018 + 72c3915 commit 9718e06
Show file tree
Hide file tree
Showing 33 changed files with 3,001 additions and 827 deletions.
11 changes: 9 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,14 @@
*.py
mojo
numojo.mojopkg
.gitignore
bench.mojo
test_ndarray.ipynb
/venv
/venv# pixi environments
.pixi
*.egg-info

# magic environments
.magic

.gitattributes
.gitignore
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Please follow the Mojo standard library style guide for all contributions. Consi
- Write concise, well-documented code.
- Adhere to formatting conventions for indentation, spacing, and line breaks.

Additionally refer to `style guide.md` for docstring and nameing conventions.
Additionally refer to `style guide.md` for docstring and naming conventions.

## Pull Requests

Expand Down Expand Up @@ -50,16 +50,20 @@ Following this structure ensures that similar functionalities are grouped togeth
```

4. **Make Your Changes**: Implement your changes in your branch.
5. **Commit Your Changes**: Commit your changes with a clear and descriptive commit message.
5. **Run Tests**: NuMojo now uses the `Magic` package manager by Modular. To ensure that all unit tests pass, the NuMojo module packages correctly, and the .mojo files are properly formatted, run the following command:
```sh
magic run final
```
6. **Commit Your Changes**: Commit your changes with a clear and descriptive commit message.

```sh
git commit -m "Add feature XYZ"
```

6. **Push Your Changes**: Push your branch to your fork on GitHub.
7. **Push Your Changes**: Push your branch to your fork on GitHub.

```sh
git push origin feature-name
```

7. **Submit a Pull Request**: Open a pull request to the `main` branch of the original repository.
8. **Submit a Pull Request**: Open a pull request to the `main` branch of the original repository.
27 changes: 16 additions & 11 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@
NuMojo is a library for numerical computing in Mojo 🔥 similar to NumPy, SciPy in Python.
<br />
<!-- when we create docs -->
<a href="https://github.com/Mojo-Numerics-and-Algorithms-group/NuMojo-Examples-and-Benchmarks/blob/main/docs/README.md"><strong>Explore the docs» </strong></a>
<br>
<a href="https://discord.com/channels/1149778565756366939/1149778566603620455"><strong>Check out our Discord» </strong></a>
<div style="font-family: 'Arial'; border: 1px solid black; padding: 5px;">
<a href="https://github.com/Mojo-Numerics-and-Algorithms-group/NuMojo-Examples-and-Benchmarks/blob/main/docs/README.md"><strong>Explore the docs» </strong></a> &nbsp; &nbsp; <a href="https://discord.com/channels/1149778565756366939/1149778566603620455" ><strong>Check out our Discord» </strong></a>
</div>
<br />
<div style="font-family: 'Arial'; border: 1px solid black; padding: 5px;">
<a href="./docs/readme_zh_cn.md"><strong>中文» </strong></a> &nbsp; <a href="./docs/readme_jp.md"><strong>日本語» </strong></a>
</div>
<!-- <a href="./docs/readme_kr.md"><strong>한국어 문서» </strong></a> -->
<!-- <br /> -->
<!-- <br /> -->
<!-- <a href="">View Demo</a>
·
Expand Down Expand Up @@ -57,7 +62,7 @@ NuMojo intends to capture a wide swath of numerics capability present in the Pyt

NuMojo intends to try and get the most out of the capabilities of Mojo including vectorization, parallelization, and GPU acceleration(once available). Currently, NuMojo extends (most of) the standard library math functions to work on array inputs.

NuMojo intends to be a building block for other Mojo packages that need fast math under the hood without the added weight of a ML back and forward propagation system
We intend NuMojo to be a building block for other Mojo packages that need fast math under the hood without the added weight of a ML back and forward propagation system

### What NuMojo is not

Expand Down Expand Up @@ -108,10 +113,10 @@ There are two approach to install and use the Numojo package.
This approach invovles building a standalone package file `mojopkg`.

1. Clone the repository.
1. Build the package using `mojo pacakge numojo`
1. Move the numojo.mojopkg into the directory containing the your code.
2. Build the package using `mojo package numojo`
3. Move the numojo.mojopkg into the directory containing the your code.

### Inlcude NuMojo's path for compiler and LSP
### Include NuMojo's path for compiler and LSP

This approach does not require buiding a package file. Instead, when you compile your code, you can include the path of NuMojo reporsitory with the following command:

Expand All @@ -124,11 +129,11 @@ This is more flexible as you are able to edit the NuMojo source files when testi
In order to allow VSCode LSP to resolve the imported `numojo` package, you can:

1. Go to preference page of VSCode.
1. Got to `Mojo › Lsp: Include Dirs`
1. Click `add item` and write the path where the Numojo repository is located, e.g. `/Users/Name/Programs/NuMojo`.
1. Restart the Mojo LSP server.
2. Go to `Mojo › Lsp: Include Dirs`
3. Click `add item` and write the path where the Numojo repository is located, e.g. `/Users/Name/Programs/NuMojo`.
4. Restart the Mojo LSP server.

Now VSCode can show function hints for the Numojo pakcage!
Now VSCode can show function hints for the Numojo package!

## Contributing

Expand Down
147 changes: 147 additions & 0 deletions docs/readme_jp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<a name="readme-top"></a>
<!-- add these later -->
<!-- [![MIT License][license-shield]][] -->

<div align="center">
<a href="">
<img src="../assets/numojo_logo.png" alt="Logo" width="350" height="350">
</a>

<h1 align="center" style="font-size: 3em; color: white; font-family: 'Avenir'; text-shadow: 1px 1px orange;">NuMojo</h1>

<p align="center">
NuMojoは、PythonのNumPyやSciPyに似たMojo🔥で数値計算を行うためのライブラリです.
<br />
<!-- when we create docs -->
<a href="https://github.com/Mojo-Numerics-and-Algorithms-group/NuMojo-Examples-and-Benchmarks/blob/main/docs/README.md"><strong>ドキュメントを読む» </strong></a>
<br>
<a href="https://discord.com/channels/1149778565756366939/1149778566603620455"><strong>
Discord チャンネルに参加する» </strong></a>
<br />
<!-- <br /> -->
<!-- <a href="">View Demo</a>
·
<a href="">Report Bug</a>
·
<a href="">Request Feature</a> -->
</p>
</div>

<!-- <details>
<summary>Table of Contents</summary>
<ol>
<li>
<a href="#about-the-project">About The Project</a>
<ul>
<li><a href="#what-numojo-is"> What NuMojo is </a></li>
<li><a href="#what-numojo-is-not">What NuMojo is not</a></li>
</ul>
</li>
<a href="#goals-roadmap">Goals/Roadmap</a>
<ul>
<li><a href="#long-term-goals">Long term goals</a></li>
</ul>
<li><a href="#usage">Usage</a></li>
<li><a href="#how-to-install">How to install</a></li>
<li><a href="#contributing">Contributing</a></li>
<li><a href="#warnings">Warnings</a></li>
<li><a href="#license">License</a></li>
<li><a href="#acknowledgments">Acknowledgments</a></li>
</ol>
</details> -->

## プロジェクトについて

### NuMojoとは

NuMojoは、PythonのNumPy、SciPyとScikit に存在する幅広い数値機能を取り込むことを目的としています。

ベクトル化、並列化、GPUアクセラレーション(利用可能になった場合)など、Mojoの機能を最大限に活用することを試みています。現在、NuMojoは、配列入力で動作するようにスタンダードライブラリの数学関数を(ほとんど)拡張しています。

NuMojoは、MLのバックとフォワード伝搬システムの負荷なしに高速な計算を必要とする他のMojoパッケージのためのビルディングブロックになることを意図している

注意:NuMojoは機械学習ライブラリではなく、コアライブラリに機械学習アルゴリズムが含まれることはありません。

## 目標

詳細なロードマップについては、[Roadmap.md](Roadmap.md)(英語)ファイルを参照してください。

私たちの主な目標は、Mojoに高速で包括的な数値計算ライブラリを実装することです。以下はNuMojoの長期目標です、

### 長期目標

* 線形代数
* ネイティブの n 次元配列
* ベクトル化、並列化された数学演算
* 配列操作 - vstack、スライス、連結など
* 微積分
* 積分と微分など
* オプティマイザ
* 関数近似
* 並べ替え

## 使い方

以下にコード例を示します、

```mojo
import numojo as nm
fn main() raises:
# ランダムな float64 値を使用して 2 つの 1000x1000 行列を生成する。
var A = nm.NDArray[nm.f64](shape=List[Int](1000,1000), random=True)
var B = nm.NDArray[nm.f64](1000,1000, random=True)
# A*B
print(nm.linalg.matmul_parallelized(A, B))
```

利用可能なすべての機能は[ここ](features.md)で見つけてください

## インストール方法

NuMojoパッケージをインストールして利用するには2つの方法があります。

### パッケージのビルド方法

このアプローチでは、スタンドアロンパッケージファイル `mojopkg` をビルドする。

1. リポジトリをクローンする。
2. `mojo pacakge numojo` を使用してパッケージをビルドする。
3. numojo.mojopkg をあなたのコードを含むディレクトリに移動する。

### コンパイラとLSPにNuMojoのパスを含める。

この方法では、パッケージファイルを作成する必要はありません。コードをコンパイルするときに、以下のコマンドでNuMojoリポジトリのパスをインクルードできます:

```console
mojo run -I "../NuMojo" example.mojo
```

これは、コードをテストするときにNuMojoソースファイルを編集できるので、より柔軟です。

VSCode LSPがインポートされた `numojo` パッケージを解決できるようにするには、次のようにします:

1. VSCodeの環境設定ページを開きます。
2. Mojo ' Lsp: Include Dirs` に移動します。
3. add item` をクリックし、Numojo リポジトリがあるパスを追加します。例えば `/Users/Name/Programs/NuMojo` です。
4. Mojo LSPサーバーを再起動します。

これでVSCodeがNumojoパッケージの関数ヒントを表示できるようになります!

## 貢献

どのような貢献でも大歓迎です**。コントリビュートに関する詳細やガイドラインは、[こちら](CONTRIBUTING.md)を参照してください。

## 警告

このライブラリはまだ非常に未完成であり、いつでも変更される可能性があります。

## ライセンス

LLVM例外を含むApache 2.0ライセンスの下で配布されています。詳細は[LICENSE](https://github.com/Mojo-Numerics-and-Algorithms-group/NuMojo/blob/main/LICENSE)とLLVM [License](https://llvm.org/LICENSE.txt)を参照してください。

## 謝辞

* Modular](https://github.com/modularml)によって作成されたネイティブの[Mojo](https://github.com/modularml/mojo)で構築されています。
Loading

0 comments on commit 9718e06

Please sign in to comment.