Commit Graph

54 Commits

Author SHA1 Message Date
Glen Whitney 7ec9686019 feat: Homogeneous typed Tuple class using templates 2022-08-05 05:44:28 -07:00
Glen Whitney b0fb004224 feat: Template types for Pocomath
Tuple<T> and a couple of functions on it are now working according to
  the target spec. As desired, no instantiations of a template type
  are made until some function that takes an instantiation is called.
2022-08-04 08:23:14 -07:00
Glen Whitney a743337134 refactor: fill in stub for instantiating template type 2022-08-03 19:57:11 -07:00
Glen Whitney e82bcf5a9c refactor: Include more code that should work for instantiating type templates
In particular, there is now an empty stub for the function that actually
  installs the instantiations into the PocomathInstance
2022-08-03 17:55:53 -07:00
Glen Whitney 27bf23db54 feat(Tuple): Stub for a template type
This adds the target initial definition of a homogeneous Tuple<T>
  type, and just enough processing that the type can be defined and
  non-template methods that deal with the generic base type Tuple can
  be called. Still has no actual template instantiation.
2022-08-03 11:27:40 -07:00
Glen Whitney 21ce098f98 test(templates): Check that unjoinable types are detected 2022-08-03 10:22:17 -07:00
Glen Whitney 01658b13c2 test(templates): Add one more (unfortunate) test case 2022-08-03 09:42:13 -07:00
Glen Whitney 5dab7d64e7 fix(templates): Enhance the catchall to call the correct specialization
Also enhances type inference in preparation for template types.
2022-08-03 09:35:11 -07:00
Glen Whitney 880efac15b feat(gcd,lcm): Allow arbitrarily many arguments
And add an 'associate' predicate for two complex numbers to check the results
2022-08-02 10:32:06 -07:00
Glen Whitney 1b8314c0cc refactor: Tighten definition of complex gcd to just GaussianInteger 2022-08-02 09:52:39 -07:00
Glen Whitney fd32ee1f10 Merge pull request 'feat(install): Allow plain functions' (#44) from install_plain into main
Reviewed-on: #44
2022-08-02 07:50:14 +00:00
Glen Whitney 8418817f9f feat(install): Allow plain functions 2022-08-02 00:47:37 -07:00
Glen Whitney 0ce4de086c Merge pull request 'feat(Chain): add computation pipelines like mathjs' (#43) from chainify into main
Reviewed-on: #43
2022-08-01 23:28:32 +00:00
Glen Whitney 814f660000 feat(Chain): add computation pipelines like mathjs
Also adds a `mean()` operation so there will be at least one operation
  that takes only a rest parameter, to exercise the ban on splitting
  such a parameter between the stored value and new arguments.
  Adds various tests of chains.

  Resolves #32.
2022-08-01 16:24:20 -07:00
Glen Whitney 46ae7f78ab Merge pull request 'feat(floor): Provide example of op-centric organization' (#42) from op_centric into main
Reviewed-on: #42
2022-08-01 15:30:10 +00:00
Glen Whitney 7d1a435aa0 feat(floor): Provide example of op-centric organization 2022-08-01 08:28:21 -07:00
Glen Whitney fe54bc6004 feat: Template operations (#41)
Relational functions are added using templates, and existing generic functions are made more strict with them. Also a new built-in typeOf function is added, that automatically updates itself.

Resolves #34.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #41
2022-08-01 10:09:32 +00:00
Glen Whitney 2609310b8e Merge pull request 'feat(Complex): support division' (#40) from complex_division into main
Reviewed-on: #40
2022-07-31 18:09:52 +00:00
Glen Whitney 102a7c42dc feat(Complex): support division 2022-07-31 11:08:07 -07:00
Glen Whitney 6775b66686 Merge pull request 'feat: Implement subtypes' (#37) from subtypes into main
Reviewed-on: #37
2022-07-30 12:02:45 +00:00
Glen Whitney c429c19dfe feat: Implement subtypes
This should eventually be moved into typed-function itself, but for
  now it can be implemented on top of the existing typed-function.

  Uses subtypes to define (and error-check) gcd and lcm, which are only
  defined for integer arguments.

  Resolves #36.
2022-07-30 04:59:04 -07:00
Glen Whitney 4d38f4161c Merge pull request 'test: Check for undefined types, as a means to detect typos in type names' (#35) from check_type_names into main
Reviewed-on: #35
2022-07-30 02:45:44 +00:00
Glen Whitney 81127b8a9b test: Check for undefined types, as a means to detect typos in type names 2022-07-29 19:43:24 -07:00
Glen Whitney 31d3be277d Merge pull request 'refactor: Simpler merging mechanism' (#33) from merge_instances into main
Reviewed-on: #33
2022-07-29 04:42:05 +00:00
Glen Whitney d9d7af961f refactor: Simpler merging mechanism
Merging of Pocomath modules is eased by allowing one PocomathInstance to
  be merged into another. That allows types, for example, to be exported
  as a PocomathInstance (so there is no need for a special identifier
  convention for types; they can be directly added with an installType
  method). Also, larger modules can just be exported as an instance, since
  there is more flexibility and more checking in merging PocomathInstances
  than raw modules.
2022-07-27 22:28:40 -07:00
Glen Whitney 58fa661a2d Merge pull request 'fix(Types): Move distinct types into distinct identifiers' (#28) from bigint_sqrt into main
Reviewed-on: #28
2022-07-25 19:54:56 +00:00
Glen Whitney f68c7bd1fb fix(Types): Move distinct types into distinct identifiers
This allows types to be collected; prior to this commit they
   were conflicting from different modules.

   Uses this fix to extend sqrt to bigint, with the convention
   that it is undefined for non-perfect squares when 'predictable'
   is false and is the "best" approximation to the square root when
   'predictable' is true. Furthermore, for negative bigints, you might
   get a Gaussian integer when predictable is false; or you will just get
   your argument back when 'predictable' is true because what other
   bigint could you give back for a negative bigint?

   Also had to modify tests on the sign in sqrt(Complex) and add functions
   'zero' and 'one' to get types to match, as expected in #27.

   Adds numerous tests.

   Resolves #26.
   Resolves #27.
2022-07-25 11:56:12 -07:00
Glen Whitney e5cce2eaff Document new features in README. 2022-07-25 11:44:19 +00:00
Glen Whitney b21d2b59fa Merge pull request 'feat: Implement signature-specifc reference' (#25) from specific_signature into main
Reviewed-on: #25
2022-07-25 11:33:50 +00:00
Glen Whitney 91ec20edd8 feat: Implement signature-specifc reference
Also implements a config object that upon change, lazily invalidates
  all operations that access it.

  Also allows references to signatures with nonexistent types (which
  typed-function does not); they come back as undefined.

  Uses these features to implement sqrt for number and complex.

  Resolves #7.
2022-07-25 04:20:13 -07:00
Glen Whitney 79f261ff65 Merge pull request 'feat(Types): Improve type spec and ignore signatures that use unknown type' (#23) from forgiving_types into main
Reviewed-on: #23
2022-07-24 19:53:40 +00:00
Glen Whitney 358f68fbbd feat(Types): Improve type spec and ignore signatures that use unknown type 2022-07-24 12:52:23 -07:00
Glen Whitney 890752a1e7 Merge pull request 'feat: Switch to function-based specification of dependencies' (#22) from ultimate_notation into main
Reviewed-on: #22
2022-07-23 16:59:21 +00:00
Glen Whitney 9fb3aa2959 feat: Switch to function-based specification of dependencies
Allows dependencies to be economically expressed and used.
  For example, see the new definition of subtract.
  Credit for the basic idea goes to James Drew, see
  https://stackoverflow.com/a/41525264

  Resolves #21.
2022-07-23 09:55:02 -07:00
Glen Whitney d72c443616 feat: Add and illustrate multiple ways of specifying implementations (#19)
Resolves #9.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #19
2022-07-23 05:06:48 +00:00
Glen Whitney 4fdafc751e feat: Add a couple of ways to install generics safely. (#18)
Resolves #10.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #18
2022-07-23 02:41:59 +00:00
Glen Whitney 2a60cc0989 Merge pull request 'refactor: Use Object.defineProperty with a getter to invalidate' (#17) from no_invalid into main
Reviewed-on: #17
2022-07-22 22:09:17 +00:00
Glen Whitney e6699ce642 refactor: Use Object.defineProperty with a getter to invalidate
Rather than setting a dummy function; this avoids anyone ever storing
  a dummy function.

  Resolves #8.
2022-07-22 15:06:56 -07:00
Glen Whitney 4a2d53a68a Merge pull request 'fix: Prevent PocomathInstance from clobbering its own methods' (#16) from protect_reserve into main
Reviewed-on: #16
2022-07-22 21:29:17 +00:00
Glen Whitney b72212d929 fix: Prevent PocomathInstance from clobbering its own methods
Resolves #6.
2022-07-22 14:25:26 -07:00
Glen Whitney 0069597a76 fix: Separate typed instance for each PocomathInstance (#15)
Also starts each PocomathInstance with no types at all, and uses the new
  situation to eliminate the need for a Complex "base case".

  Resolves #14.
  Resolves #13.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #15
2022-07-22 20:49:14 +00:00
Glen Whitney ed71b15969 Merge pull request 'fix: Avoid files that differ just by case' (#12) from no_case_duplicates into main
Reviewed-on: #12
2022-07-22 16:47:09 +00:00
Glen Whitney 664f30ddef fix: Avoid files that differ just by case 2022-07-22 09:45:58 -07:00
Glen Whitney 89f4977e78 doc: Move an incorrectly placed comment 2022-07-20 02:57:46 +00:00
Glen Whitney 9a63389a4c doc: Fix a couple of typos in README 2022-07-20 02:53:29 +00:00
Glen Whitney a16d6a5ce3 feat: Add all remaining features of original Picomath PoC (#5)
Namely, a README describing the proof-of-concept,
  a custom selective loader, and some additional tests.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #5
2022-07-19 19:37:52 +00:00
Glen Whitney 84a8b9d5c4 feat: Allow self-reference in implementations (#4)
This PR also uses such self-reference to define negate and add
  for Complex numbers in a way that is independent of component types.

  Also adds a bigint type and verifies that pocomath will then handle
  Gaussian integers "for free".

  Ensures that if one function is invalidated, then any that depend on it will be.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #4
2022-07-19 18:54:22 +00:00
Glen Whitney 77b04fbdbb Merge pull request 'feat: Add complex numbers' (#3) from complex into main
Reviewed-on: #3
2022-07-19 16:55:24 +00:00
Glen Whitney b82336e590 feat: Add complex numbers
No negation (and therefore no subtraction) since that needs self-reference.
2022-07-19 09:52:16 -07:00
Glen Whitney b59a8c2ca9 feat: Allow nonrecursive whole-function dependencies (#2)
And implement negate on numbers, and use dependencies to define subtract.

Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Reviewed-on: #2
2022-07-19 03:10:55 +00:00