Commit Graph
134 Commits
Author SHA1 Message Date
Alexandre Linhares a0048d16b5 Delete copycat.log 2017-09-27 20:34:31 -03:00
alex 02558289ad Preparing for refactor 2017-09-27 20:32:54 -03:00
Alexandre Linhares a564e43dff Preparing for refactor 2017-09-27 20:00:02 -03:00
Alexandre Linhares 120aa3a293 Merge branch 'master' of https://github.com/Alex-Linhares/co.py.cat 2017-09-27 16:02:39 -03:00
Alexandre Linhares 51e4ba64e2 Created simple jupyter notebook 2017-09-27 16:02:34 -03:00
alex 27bbc6118e Preparing for refactor... 2017-09-26 22:47:09 -03:00
alex 7ff0488861 Merge branch 'master' of https://github.com/Alex-Linhares/co.py.cat 2017-09-25 22:33:10 -03:00
Alexandre Linhares 0905d35680 start work om distributed decision making 2017-09-25 22:32:57 -03:00
Alexandre Linhares 36a1a31fe2 Update README.md 2017-09-07 19:26:10 -03:00
Alexandre Linhares 0a54c0ee83 Update README.md 2017-09-06 16:06:58 -03:00
Alexandre Linhares 729f6ec30c Merge branch 'master' of https://github.com/Alex-Linhares/co.py.cat 2017-08-28 00:02:46 -03:00
Alexandre Linhares b5e35a35dd Found entry points for the research project 2017-08-28 00:02:34 -03:00
Alexandre Linhares 8611e415de Update README.md 2017-08-27 23:33:52 -03:00
Alexandre Linhares 67c87c7fde Update README.md 2017-08-27 23:28:41 -03:00
Alexandre Linhares cc58c8d50a Merge pull request #1 from LSaldyt/master
Ports to Python3
2017-08-27 12:37:36 -03:00
Alexandre Linhares 2cdb9bbb36 Update README.md 2017-08-27 12:30:12 -03:00
Alexandre Linhares 197bbd361e Update README.md 2017-08-27 12:29:47 -03:00
LSaldyt bc848e8f2d Ports to Python3 2017-07-31 17:08:26 -06:00
Arthur O'Dwyer 318d0e2349 Fix a lot of crashes with empty or single-letter inputs. 2017-05-03 02:01:57 -07:00
Arthur O'Dwyer 2a48245c15 Add "frames per second" to the CursesReporter.
You can now set the FPS goal with `--fps=10` (or whatever) on the command line;
and the current (measured) FPS is displayed in the lower right corner.

During the run, you can bump the FPS goal up and down with `F` and `f` respectively!
2017-05-02 18:37:40 -07:00
Arthur O'Dwyer 0eec6a5259 Massively improve CursesReporter.
The Slipnet itself turns out to be boring to look at.
More interest is found in the Workspace structures, such as bonds,
groups, and correspondences.

The old behavior of `curses_main.py` is still accessible via

    python curses_main.py abc abd xyz --focus-on-slipnet
2017-05-02 18:01:46 -07:00
Arthur O'Dwyer ef4a9c56c5 Try to fix up breakGroup.
With the new CursesReporter, I'm able to observe groups getting built
and broken; and I observed that sometimes a Bond (between a Letter and
a Group) would apparently survive the Group's breaking.
Reorder the operations in `breakGroup` so that the higher-level ones
("detach this Group from its external bonds") come strictly before
the lower-level ones ("ungroup this Group's members and remove this
Group from the Workspace, thus destroying it").

However, the "buggy" behavior I observed turned out to be due to a bug
in my display code and not due to anything wrong with `breakGroup`.
I suspect this patch is actually purely cosmetic.
2017-05-02 17:46:25 -07:00
Arthur O'Dwyer 730239f464 Rip out dead Bond.destinationIsOnRight and Bond.bidirectional. NFC. 2017-05-02 12:37:15 -07:00
Arthur O'Dwyer 5793fb887c Rip out dead method morePossibleDescriptions. NFC.
This code is already present in `getPossibleDescriptions`... which is
also a terrible function from the philosophical point of view, because
it secretly encodes knowledge about every predicate known to the system.
2017-05-02 11:33:43 -07:00
Arthur O'Dwyer 864c28609c Smartness update! A single letter is both "leftmost" and "rightmost".
Before this change, Copycat was unable to formulate more than the empty rule for
    abc : abd :: f : f
    abc : dbc :: f : f
    abc : aac :: f : f
After this change, Copycat strongly prefers
    abc : abd :: f : g  ("Replace the rightmost letter with its successor")
    abc : dbc :: f : d  ("Replace the leftmost letter with d")
    abc : aac :: f : e  ("Replace the middle letter with its predecessor")
2017-05-02 11:17:23 -07:00
Arthur O'Dwyer ecc2c2e407 Add report_workspace() to Reporter, and remove dead rules from the workspace.
I think the change to `workspace.breakRule()` is harmless. In theory, it
should make Copycat less hesitant to come up with rules that conflict with
the already-broken rule.
2017-05-01 15:28:38 -07:00
Arthur O'Dwyer 25d73785de Further Pythonicity. NFC. 2017-05-01 13:07:19 -07:00
Arthur O'Dwyer ceaf640147 Remove some more logging cruft. NFC. 2017-04-30 15:26:19 -07:00
Arthur O'Dwyer c4e30f7399 Make possibleGroupBonds into a member function of Bond. NFC. 2017-04-30 15:18:19 -07:00
Arthur O'Dwyer 7947e955d7 More Pythonicisms. NFC. 2017-04-30 14:45:20 -07:00
Arthur O'Dwyer ddfb34973d Rip out unused coderack.postings and coderack.runCodelets. NFC. 2017-04-30 10:38:42 -07:00
Arthur O'Dwyer f9fc255151 Refactor coderack.probabilityOfPosting. NFC. 2017-04-30 10:27:55 -07:00
Arthur O'Dwyer 48c45e4b0a Fix more flake8 cruft; remove a bunch of logging. 2017-04-29 15:55:54 -07:00
Arthur O'Dwyer c9bc26e03d Minor Pythonicisms. NFC. 2017-04-29 14:29:43 -07:00
Arthur O'Dwyer 11e9571ee0 Oops, add Reporter to the list of exported names. 2017-04-23 01:36:40 -07:00
Arthur O'Dwyer 34157be1f9 Shorten the setup.py for the copycat module. NFC. 2017-04-22 22:46:22 -07:00
Arthur O'Dwyer 9a2a1d6010 Add the Slipnet to the curses reporter.
This isn't terribly useful to the human observer, actually.
It seems like the most useful factors that ought to be displayed
are really the groups/bonds in the workspace and the current
"rule" (if any). Particularly, with the current design of Copycat,
it seems like the "rule" should be part of the displayed output
just the same as the modified target string.
2017-04-22 19:00:57 -07:00
Arthur O'Dwyer 16aae98c59 Fix a bunch of flake8 spam. NFC. 2017-04-22 18:41:48 -07:00
Arthur O'Dwyer ec2c172ce0 Rip out some unused members of Slipnode. NFC. 2017-04-22 18:37:55 -07:00
Arthur O'Dwyer b5b04c77a1 Remove a redundant "opposite" link from the slipnet.
This does change the micro behavior of Copycat. I would hope it doesn't
change the macro behavior, or at least changes it for the better.
2017-04-22 17:59:32 -07:00
Arthur O'Dwyer e3e6b051d3 Whitespace. NFC. 2017-04-22 17:56:46 -07:00
Arthur O'Dwyer 3de933dbfa Redo all the argument parsing with argparse. 2017-04-22 17:53:06 -07:00
Arthur O'Dwyer 192ec2f106 Clean up some overly Java-ish base class stuff. NFC. 2017-04-18 23:44:38 -07:00
Arthur O'Dwyer f2ffac4e66 Add a curses front-end. This is looking good now!
And clean up some logic in `rule.py`. This is the place where the
"brains" of Copycat really live, it seems; Copycat can only succeed
at solving a puzzle if it can take the `Rule` it deduced and apply
it to the target string to produce a new string. And it can only
do that if the necessary *actions* have been programmed into `rule.py`.
Right now, it explicitly can't deal with "rules" that involve more
than one local change; that involve reversal; or more importantly,
IIUC, rules that involve "ascending runs", because the idea of a
successor-group is(?) known to the Slipnet but not to `rule.py`;
the latter deals only in "strings", not in "workspace objects".
This seems like a major flaw in the system... but maybe I'm missing
something.
2017-04-18 23:18:26 -07:00
Arthur O'Dwyer 9f8bc8e66e Remove all print statements from the Copycat library.
Convert the most important one to logging; kill the rest.
2017-04-18 20:55:56 -07:00
Arthur O'Dwyer 65124fa45d Add a "setup.py" for pip-installing from GitHub.
You can now install Copycat into your Python virtualenv without even
checking out this repository! Just run this command:

    pip install -e git+git://github.com/Quuxplusone/co.py.cat.git#egg=copycat

To check out a specific branch,

    pip install -e git+git://github.com/Quuxplusone/co.py.cat.git@branch#egg=copycat
2017-04-18 18:22:32 -07:00
Arthur O'Dwyer a3b977846e git mv context.py -> copycat.py; and start work on a "reporter" API.
The goal here is to use `curses` to display the coderack, slipnet,
and temperature in real time. A further goal would be a reporter
that sent the data over websockets to a browser, at which point
I could throw this thing up on Heroku and let people mess with it.
(Not that that would be very entertaining, yet.)
2017-04-18 01:59:51 -07:00
Arthur O'Dwyer 189bce2aa2 Remove one not-very-useful logging line. NFC. 2017-04-18 01:31:39 -07:00
Arthur O'Dwyer db7dc21f83 Fix a crash on main.py aa b zz.
The "leftmost object" in the string `b` does span the whole string,
but it's not a `Group`, so the old code would crash when it got
to the evaluation of `group.objectList` (since `Letter`s don't have
`objectList`s).
2017-04-18 01:12:27 -07:00
Arthur O'Dwyer fd74290d39 Clean up the handling of codelet arguments. NFC.
Just make all argument-passing explicit; which means the coderack
no longer cares about `oldCodelet` (which was being used only to
get the implicit arguments to the new codelet).
2017-04-18 01:12:27 -07:00