thewca / tnoodle

Development for the official WCA scramble server
https://www.worldcubeassociation.org/regulations/scrambles/
GNU Affero General Public License v3.0
393 stars 93 forks source link

TNoodle in python #339

Closed cubetastic33 closed 6 years ago

cubetastic33 commented 6 years ago

I want to use TNoodle in python. Is there any python version I could use? otherwise, is there any way to use the other code in python? Thanks!

jfly commented 6 years ago

@cubetastic33, TNoodle is written in Java, so it's not possible to run it in plain python. However, it is possible to use TNoodle through Jython! You can see us doing that in our .jy tests: https://github.com/thewca/tnoodle/tree/master/scrambles/test.

cubetastic33 commented 6 years ago

@jfly cool! But, where are these imports from?

import tntdebug

from puzzle import TwoByTwoCubePuzzle from puzzle import NoInspectionThreeByThreeCubePuzzle from net.gnehzr.tnoodle.scrambles import AlgorithmBuilder

How do I install those modules (if required)?

jfly commented 6 years ago

tntdebug is here: https://github.com/thewca/tnoodle/blob/master/tntdebug.py

The other stuff is written in java. Jython let's you import java code, which is why this all works. You can find some more information about how exactly we invoke jython in this script: https://github.com/thewca/tnoodle/blob/master/jython.

cubetastic33 commented 6 years ago

@jfly ok, but how do I execute this code? Like from my terminal? If I try jython filename, it obviously didn't work

jfly commented 6 years ago

Yes, from your terminal. If you have trouble with that, I suggest looking at what Travis does to run the tests (see https://github.com/thewca/tnoodle/blob/4f8781e40f005b5dc8cc79cb99dd6991d12b2ca0/.travis.yml#L25).

cubetastic33 commented 6 years ago

@jfly I still don't understand. What command should I use?

campos20 commented 6 years ago

Out of curiosity, what are you trying to do? I mean, generate scrambles? Are you writing a stand alone software?

cubetastic33 commented 6 years ago

@campos20 well, I am trying to generate scrambles on my Raspberry Pi 0 W, and show them on an lcd screen.

cubetastic33 commented 6 years ago

@jfly when I execute the command ./tmt make check, it is giving a lot of logs, but how do I generate scrambles from a different python file? like, what function do I use?

jfly commented 6 years ago

@cubetastic33, I'd suggest reading our tests, it should be fairly obvious what's going on. Try taking a look at https://github.com/thewca/tnoodle/blob/master/scrambles/test/NoInspectionThreeByThreeTest.jy#L62.

cubetastic33 commented 6 years ago

@jfly When I finished running it, this is what it said:

BUILD FAILED

Total time: 11 mins 11.408 secs Hit excepthook! stderr.isatty: True stdin.isatty: True stdout.isatty: True Traceback (most recent call last): File "./tmt", line 1220, in tmt._main() File "./tmt", line 231, in _main self.args.func() File "./tmt", line 287, in _make tmt._make(projectName=project.name, command='compile') File "./tmt", line 293, in _make commandFunc() File "tnoodle-android/tmtproject.py", line 17, in compile self.runGradleTask("assemble") File "tnoodle-android/tmtproject.py", line 14, in runGradleTask assert retVal == 0 AssertionError

/home/pi/Desktop/tnoodle/tnoodle-android/tmtproject.py(14)runGradleTask() -> assert retVal == 0

jfly commented 6 years ago

What's the "it" that you ran? Is that the entire output?

cubetastic33 commented 6 years ago

@jfly I ran ./tmt make checkagain, and I got the following result:

$ ./tmt make check
svglite is up to date, not recompiling
utils is up to date, not recompiling
web-utils is up to date, not recompiling
winstone is up to date, not recompiling
quercus is up to date, not recompiling
hello-winstone is up to date, not recompiling
sq12phase is up to date, not recompiling
min2phase is up to date, not recompiling
threephase is up to date, not recompiling
scrambles is up to date, not recompiling
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
java.lang.RuntimeException: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
    at com.android.build.gradle.internal.SdkHandler.getAndCheckSdkFolder(SdkHandler.java:102)
    at com.android.build.gradle.internal.SdkHandler.getSdkLoader(SdkHandler.java:112)
    at com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:86)
    at com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.java:673)
    at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:610)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:566)
    at com.android.build.gradle.BasePlugin$10$1.call(BasePlugin.java:563)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:562)
    at com.android.build.gradle.BasePlugin$10.execute(BasePlugin.java:559)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy12.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:532)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:93)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
    at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

FAILURE: Build failed with an exception.

* Where:
Build file '/home/pi/Desktop/tnoodle/tnoodle-android/library/build.gradle' line: 52

* What went wrong:
A problem occurred evaluating project ':library'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 3 mins 46.744 secs
Hit excepthook! stderr.isatty: True stdin.isatty: True stdout.isatty: True
Traceback (most recent call last):
  File "./tmt", line 1220, in <module>
    tmt._main()
  File "./tmt", line 231, in _main
    self.args.func()
  File "./tmt", line 287, in _make
    tmt._make(projectName=project.name, command='compile')
  File "./tmt", line 293, in _make
    commandFunc()
  File "tnoodle-android/tmtproject.py", line 17, in compile
    self.runGradleTask("assemble")
  File "tnoodle-android/tmtproject.py", line 14, in runGradleTask
    assert retVal == 0
AssertionError
> /home/pi/Desktop/tnoodle/tnoodle-android/tmtproject.py(14)runGradleTask()
-> assert retVal == 0
jfly commented 6 years ago

For anyone else following along, we continued this discussion over on https://github.com/thewca/tnoodle/issues/341, for some reason...