1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-04 20:52:43 +01:00
phorge-phorge/src/applications/fact/chart
epriestley 70c643c685 Simplify implementation of "pure" Chart functions
Summary:
Depends on D20445. Ref T13279. I'm not sure what the class tree of functions actually looks like, and I suspect it isn't really a tree, so I'm hesitant to start subclassing. Instead, try adding some `isSomethingSomething()` methods.

We have some different types of functions:

  # Some functions can be evaluated anywhere, like "constant(3)", which always evaluates to 3.
  # Some functions can't be evaluated anywhere, but have values everywhere in some domain. This is most interesting functions, like "number of open tasks". These functions also usually have a distinct set of interesting points, and are constant between those points (any count of anything, like "open points in project" or "tasks closed by alice", etc).
  # Some functions can be evaluated almost nowhere and have only discrete values. This is most of the data we actually store, which is just "+1" when a task is opened and "-1" when a task is closed.

Soon, I'd like to be able to show ("all tasks" - "open tasks") and draw a chart of closed tasks. This is somewhat tricky because the two datasets are of the second class of function (straight lines connecting dots) but their "interesting" x values won't be the same (users don't open and close tasks every second, or at the same time).

The "subtract X Y" function will need to be able to know that `subtract "all tasks" 3` and `subtract "all tasks" "closed tasks"` evaluate slightly differently.

To make this worse, the data we actually //store// is of the third class of function (just the "derivative" of the line chart), then we accumulate it in the application after we pull it out of the database. So the code will need to know that `subtract "derivative of all tasks" "derivative of closed tasks"` is meaningless, or the UI needs to make that clear, or it needs to interpret it to mean "accumulate the derivative into a line first".

Anyway, I'll sort that out in future changes. For now, simplify the easy case of functions in class (1), where they're just actual functions.

Add "shift(function, number)" and "scale(function, number)". These are probably like "mul" and "add" but they can't take two functions -- the second value must always be a constant. Maybe these will go away in the future and become `add(function, constant(3))` or something?

Test Plan: {F6382885}

Reviewers: amckinley

Reviewed By: amckinley

Subscribers: yelirekim

Maniphest Tasks: T13279

Differential Revision: https://secure.phabricator.com/D20446
2019-04-23 12:29:45 -07:00
..
PhabricatorChartAxis.php Select the domain (X-axis range) for charts before pulling data 2019-04-18 13:11:17 -07:00
PhabricatorChartDataQuery.php Add a "sin()" function to charts 2019-04-18 13:19:02 -07:00
PhabricatorChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorChartFunctionArgument.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorChartFunctionArgumentParser.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorConstantChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorCosChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorFactChartFunction.php Make chart function argument parsing modular/flexible with 900 pages of error messages 2019-04-23 12:26:32 -07:00
PhabricatorScaleChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorShiftChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorSinChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00
PhabricatorXChartFunction.php Simplify implementation of "pure" Chart functions 2019-04-23 12:29:45 -07:00