Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to TypeScript #551

Open
mubaidr opened this issue May 17, 2020 · 44 comments
Open

Migrate to TypeScript #551

mubaidr opened this issue May 17, 2020 · 44 comments

Comments

@mubaidr
Copy link
Contributor

@mubaidr mubaidr commented May 17, 2020

We plan to gradually migrate brain.js to TypeScript, code base is pretty large, so we would love your help! 💪

How to contribute?

  • Convert a file from .js to .ts
  • Add types, fix all type errors.
  • Submit a PR! 🎉

Here you can find a guide on how to contribute.

Want to convert something, let us know in the comment and go ahead! 😎

To avoid duplicate work please comment on which part you want to work on (as long as nobody else is working on it) so we can mark it as taken.

Reach out to us!
Feel free to reach if you have questions or need help getting started. You can leave comments here or you can tag me in your PR if you need any help or you're not sure about something!

You can also get in touch on our Gitter & Slack.

Happy Coding! 🤟

@mubaidr mubaidr pinned this issue May 17, 2020
@mubaidr mubaidr mentioned this issue Jun 15, 2020
0 of 10 tasks complete
@yashshah1
Copy link

@yashshah1 yashshah1 commented Jul 25, 2020

I'd like to start working on this, I have some experience with Ts, can you tell me which module is up for grabs?

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Jul 25, 2020

@yashshah1 You are welcome to contribute, please pick any module or portion for conversion and mention it here, so I can mark it in-progress (to avoid any duplication effort).

@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Aug 5, 2020

I'd like to work on this too, any recommendations on where to start?

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Aug 5, 2020

@nabeelvalley here is the short guide, super simple to start. Please pick any module or portion for conversion and mention it here, so I can mark it in-progress (to avoid any duplication effort).

Here you can find a guide on how to contribute.

@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Aug 6, 2020

@mubaidr I'm working from the utilities up, to avoid having untyped dependencies

The tests seem to be failing when I convert the file to JS because it looks like Jest is running against the TS files instead of the compiled JS - has the TS Compile been configured?

Looks like the tests are also currently failing:

Test Suites: 1 failed, 5 passed, 6 of 64 total
Tests:       9 failed, 114 passed, 123 total
Snapshots:   0 total
Time:        206.723 s

It appears that the soft-max tests are receiving a Float32Array instead of a plain array - should I look where the Float32 is coming from or should I update the unit tests to expect a Floar32Array instead?

The data returned looks exactly the same, it's just that the object types are different so the deep equality is failing:

Example for one of the tests below:

  ● SoftMax › .compare2D › can run on a simple matrix

    assert.deepEqual(received, expected)

    Expected value to deeply equal to:
      [[-0, 2], [3, 4]]
    Received:
      [[-0, 2], [3, 4]]

    Difference:

    - Expected
    + Received

      Array [
    -   Array [
    +   Float32Array [
          -0,
          2,
        ],
    -   Array [
    +   Float32Array [
          3,
          4,
        ],
      ]
@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Aug 9, 2020

Yes, you can update test to expect Float32Array.

In the mean-time some tests might still fail, because they have not yet been updated recently. You can can continue working and make sure build process is successful and conversion does not cause increase in no. of failed tests.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 28, 2020

Hi! I want to help. If I convert one file, do I need to convert related files too or something? Or just a single file?

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Aug 28, 2020

You don't need to updated all the related files, just go file by file and make sure build is successful.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 28, 2020

Utilities is taken, isnt it?

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 28, 2020

Activation functions seem like a good place to start, may I work on it?

@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Aug 28, 2020

Utilities is taken, isnt it?

Hi @HarshKhandeparkar, I haven't had a chance to work on this you're welcome to take utilities if you want, just note that needs to be updated above

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 28, 2020

Np @nabeelvalley. I think I'll work on activation functions :)

@HarshKhandeparkar HarshKhandeparkar mentioned this issue Aug 28, 2020
3 of 12 tasks complete
@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 29, 2020

@nabeelvalley I think I managed to fix the jest error you were facing in #582. You may copy paste my changes to jest.config.json or wait for the PR to be merged :)

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 29, 2020

estimator/ has a single file. Looks like a nice 🎯.

@HarshKhandeparkar HarshKhandeparkar mentioned this issue Aug 29, 2020
3 of 12 tasks complete
@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 30, 2020

I think I'll snipe some of the utilities next, if you don't mind @nabeelvalley.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Aug 30, 2020

You would have probably started in alphabetical order(I am assuming), so I am going to start from the bottom.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 1, 2020

Going to snipe utilities/values* tonight :)

@robertleeplummerjr
Copy link
Contributor

@robertleeplummerjr robertleeplummerjr commented Sep 1, 2020

Huzzah!

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Sep 1, 2020

Build systems seems to be broken, I am looking into this issue. 🧯

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 1, 2020

Can I continue or should I wait?

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Sep 1, 2020

You should continue your contributions! I will try to fix it asap.

@HarshKhandeparkar HarshKhandeparkar mentioned this issue Sep 1, 2020
3 of 12 tasks complete
@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Sep 1, 2020

Hi All, taking a look at doing some of these as well today, starting from the top of utilities seeing as @HarshKhandeparkar has started from the bottom

@nabeelvalley nabeelvalley mentioned this issue Sep 1, 2020
2 of 11 tasks complete
@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Sep 1, 2020

Note, I haven't done utilities/array-lookup-table as it looks like it's working with some dynamic types and a few different cases and it's a bit difficult to infer all of these (in my opinion) until recurrent/rnn-time-step is updated. So doing it after that seems to make sense

I'm also not sure what's going on with the builds/tests as I had some issues from when I pulled the code to begin with, and the errors seem to be inconsistent (I assume due to the order in which tests are running etc.)

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 2, 2020

I am going to stop targeting utilitites for a while now. Apparently some of them refer to layer etc. So I am starting with layer/ today. I am going to drop a nuke on it 😁

@robertleeplummerjr
Copy link
Contributor

@robertleeplummerjr robertleeplummerjr commented Sep 2, 2020

Love it!

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 2, 2020

I'll actually work on utilities/kernel first because it is referenced in layer/base. I'll do base after that.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 3, 2020

NOTE: layer/base is a HOT MESS.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 3, 2020

I also wanted to underline that but apparently underline isn't supported on github.

@robertleeplummerjr
Copy link
Contributor

@robertleeplummerjr robertleeplummerjr commented Sep 9, 2020

I'm taking over the layer folder from @HarshKhandeparkar (we coordinated already), and will need utilities either done soon, or will need to go ahead and handle:

  • utilities/kernel.js
  • utilities/random.js
  • utilities/randos.js
  • utilities/randos-2d.js
  • utilities/randos-3d.js

I'd also eventually like to consolidate these into a single file, but for a later task.

@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Sep 9, 2020

Going to continue working on utilities as well, will update on here as I go:

  • utilities/to-array
  • utilities/max
@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Sep 9, 2020

__tests__/utilities/mse.js

  test('should return an array if object is passed', () => {
    const collection = {
      name: 'Steve Jobs',
      alive: false,
    };
    const temp = toArray(collection);

    expect(temp.constructor).toBe(Float32Array);
    expect(temp.length).toBe(Object.keys(collection).length);
  });
@nabeelvalley nabeelvalley mentioned this issue Sep 9, 2020
6 of 11 tasks complete
@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 9, 2020

@robertleeplummerjr I remember doing utilities/kernel.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 10, 2020

I can take utilities/random and utilities/random-weight if no one else wants to take it.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 10, 2020

@mubaidr The imports are broken and the tests are failing, am I supposed to ignore all of that and force commit?

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Sep 10, 2020

@HarshKhandeparkar I have fixed the issue. You can create pull request now.

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 10, 2020

I'll convert the randos kernel tomorrow :)

@HarshKhandeparkar HarshKhandeparkar mentioned this issue Sep 11, 2020
1 of 12 tasks complete
@robertleeplummerjr
Copy link
Contributor

@robertleeplummerjr robertleeplummerjr commented Sep 11, 2020

@HarshKhandeparkar
Copy link
Contributor

@HarshKhandeparkar HarshKhandeparkar commented Sep 11, 2020

I have randos done already, but if younknocknitnout, it all good.

Oops, sorry but I opened a PR while you were deep asleep ;)

@ofirgeller
Copy link

@ofirgeller ofirgeller commented Sep 16, 2020

@mubaidr

  1. Which file(s) can I work on?
  2. is it expected that the many tests fail at the moment?

I am have lots of free time in the next 1-2 weeks and years of experience working with typescript, so if you give me the "go ahead" I can probably convert the whole thing.

@nabeelvalley
Copy link
Contributor

@nabeelvalley nabeelvalley commented Sep 16, 2020

@ofirgeller

  1. we've been handling them sort of from utilities up, because a lot of files depend on those, just keep us updated on here for whichever file you're doing and that should be fine
  2. i'd noticed some tests are failing at the moment too, think @mubaidr was looking into that

the type checker and linter shouldn't have any issues though - i think there are just two type checker warnings from what i last saw

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Sep 17, 2020

@ofirgeller You can select any files from the the repo, and mention it here so that no effort is duplicated. Yes, we do have some failing tests, and we are working on this issue, but as @nabeelvalley said, you can start from utilities and we do have lint and typescript scripts (npm run lint) to help catch errors during conversion process.

@ofirgeller
Copy link

@ofirgeller ofirgeller commented Sep 17, 2020

Converted "array-lookup-table.js" (short and sweet), moving on to DataFormatter which will take a bit longer.

@mubaidr
Copy link
Contributor Author

@mubaidr mubaidr commented Sep 17, 2020

@ofirgeller I recommend creating a pull request per file (and related changes i.e. imports etc) to make it easier for code review and merge.

@ofirgeller
Copy link

@ofirgeller ofirgeller commented Sep 17, 2020

@mubaidr If each atomic change is a a separate commit on the same branch, do you still want each commit to be its own PR?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
6 participants
You can’t perform that action at this time.