"os.name" returns either "Omega" (only if OMEGA_VERSION is defined) or "Epsilon"
"os.getlogin()" returns the calculator owner username
"os.uname()" returns an object which has now the "username" attribute
Although we always include the on-boarding when releasing a firmware,
moving this method here costs nothing and prevents mistakes if we ever
decide to remove on-boarding.
Even though the configuration of the Vbus pin depends on the hardware
running Epsilon, we do not actually need one VbusPin object for each
configuration. Indeed, an AFGPIOPin object can be used to configure the
pin as a standard GPIO, provided one does not call its init() method.
When flashing fo the first time, we need Epsilon to know the PCB version
before the OTP are flashed. We also need the to prevent Epsilon from
writing the OTP outside of the factory.
Main changes are:
- No QPI but QuadSPI
- Use 32 command instead of 33
- Better programming of the instruction/address/data modes, according to
the 641B spec
- Use sOperatingMode instead of DefaultOperatingMode
TODO:
- Support both QPI and QuadSPI, for both flashs
- There is still confusion between sOperatingMode and DefaultOperatingMode
-> DefaultOperatingMode should not really be used
-> Read and write commands assume quad operation
It's pretty much just two callbacks that one can hook into to get some
events in or out of Ion.
It adds a couple useless checks and pointers to any build and could be
hidden behind a feature flag, but the extra weight is minimal.
The method isOrthonormal takes into account the "offscreen" portion of
the Y axis. This fixes a bug where zooming when using the Navigate
option would remove the orthonormality marker while the graph was still
orthonormal.
The old method isOrthonormal has been split into two :
- shouldBeNormalized tests whether the range is close enough to a
normal range
- isOrthonormal tests whether the range is strictly orthonormal, but
takes into account imprecisions of floating-point arithmetic
When applied to a function f(x) = constant, the method getVariables
would not find any, as the search is performed on the function's
definition.
Thus, when using the "Fill with formula" tool in Statistics, if the
formula to fill V1 is "V1=f(V2)", the formula will be considered
constant and applied to all values in V1. However, if V1 is longer than
V2, the program will attempt to read undefined values of V2.
With this change, the formula will only be applied to lines in V1 for
which there is a corresponding line in V2.
The method getVariables would not correctly remove the parameter from
the list of variables.
e.g. In the expression "box+y×int(z,x,0,1)", when trying to remove x
from the list of variables, the letter x would be removed from the name
"box" instead.
In the window to change the histogram parameters, it was possible to set
a rectangle width that was considered valid, but would make the starting
abscissa invalid, while triggering no error message. The message would
only show if the user closed the window and opened it again.
e.g. : Set a series with only one value 1e10
Change its starting abscissa to 0
Change its rectangle width to 1, confirm and close the menu
Re-open the menu, a message appears, and stays onscreen when
leaving the menu.
The loss of significance that occurs when subtracting the bounds of the
axes must be taken into account when asserting whether the range is
orthonormal.
With deepReduce(), when a simplifiaction was interrupted, expression could
contain Undefined children, which would trigger the assert in
removeUnit(). With reduce(), if a simplification is interrupted, the
entire expression becomes Undefined, which is handled by removeUnits().
Zooming in and out on a graph usually preserves orthonormality. However,
if the window has its bounds close to the limits for the values on the
axes, zooming can change the ratio.
Units derived from kelvin (mK, cK, ...) were handled like Celsius and
Fahrenheit, causing a bug where multiplications such as 2*pi*_cK to
simplify as undef.
Because of the limitations of the floating-point representation, e^x is
null for x <= 710, causing the nextRoot functions to find roots for it.
To prevent this, we looking for places where a function changes sign, we
actually require the function to take two non-null values of different
signs.
This method is used to remove extraneous empty sapce in the middle of
the window for functions that are discontinuous between their points of
interest.
To find the optimal range with a specified ratio, we compute the values
of the function on a default range, then center the Y axis to display
the maximum number of points of the function.
A test in equation_solve relies on the angle unit being set to Degree,
but doesn't actually set it. Changing the angle unit to another one in a
test prior would break this test.
Change-Id: I6785b087f171d46226d484ebaa3ebdc9e791cedc
Evaluating a function containing a sequence, an integral or a
derivative, is time consuming. Computing a range requires a plethora of
evaluations, as such ranges for these functions cannot be evaluated in a
timely fashion.
Change-Id: I088a0e896dbc26e6563291cafdfe9ceba36dd5d0
When building an orthonormal range for the automatic zoom, we provide a
ratio for the screen without the margins. This way, adding the margins
will make the graph orthonormal, and the banner cannot cover the
function.
Change-Id: If3a3f799d4e7e3e81ab77c6b418d70b734a6fbca
When computing the automatic zoom, if the X axis has integer bounds
(most likely because the range has been built to be orthonormal), do not
add margins to the X axis, so that it keeps user friendly values.
Change-Id: I49d99b79c68fbd8a49e5c2521b250c40aad75d48
Unreal's derivate method returns true, to signify that it is unchanged
by the derivation operation. This implementation mostly exists for
documentation, as an Unreal derivand will be handled by the
defaultShallowReduce method.
The general formula for deriving a power makes use of the logarithm,
which often disappears at simplification. However, replacing the symbol
before simplifying can lead to applying an invalid argument to the
logarithm, making the whole expression invalid.
e.g. diff(1/x,x,-2)
If x is replaced by -2 before reducing the power derivative, ln(-2)
will reduce to Unreal, as will the rest of the expression.
The classic differentiation forumals for trigonometric functions assume
a variable in radians. A multiplicative constant must be added when
another unit is used.
Change-Id: Iec428acd7d93e415fddb184300437ae09d1d997c
The logarithm function is undefined for negative numbers, but its
derivative, the inverse function, is defined everywhere. We thus need to
virtually limit the domain of definition of the derivative.
When a function that had previously been cached is deactivated, its
cache can be used by another function. When the function is reactivated,
if it tries to reuse its previous cache, it will be filled with values
from another function, and will not be cleared. By detaching the cache
of a function that becomes inactive, we ensure that the next time this
function is cached, the chache will be cleared.
e.g. Define to functions f(x)=x, g(x)=-x, draw them both.
Deactivate f, the redraw the graph
Reactivate f, the draw again
When three functions or more, the third function and later don't use
caching. But it is still possible for them to have been linked to a
cache (for instance if previous functions had been deactivated earlier).
To avoid a function tapping into another function's cache, we reset the
cache.
e.g. Define 3 functions f(x)=1, g(x)=2, h(x)=3, and deactivate f.
Draw the graph, come back, reactivate f, then draw again.
---> The space between y=2 and y=3 will be filled with the color of h,
as h "remembers" using cache n°2, wich currently contains the values of
function g.
Functions with a single point of inerest used to be drawn on a tiny
interval around this point.
Now, an orthonormal window is built around the point of interest, giving
a much nicer view.
Change-Id: I7793797aead2695532ddea44d93d62bb7ef870f4
When looking for extrema in a function, we need to discard results where
the function growth rate is smaller than the precision of the float type
itself : these results are likely to be too noisy, and can cause false
positives.
e.g. : The sqrt(x^2+1)-x function
Change-Id: I6e2c002d7308b41a4c226d274cbb5d9efe4ea7db
Do not use the bounds of the interval when computing a refined range.
As the bounds are often integers, the zoom would give strange result on
some non-continuous functions (e.g. f(x) = x!).
Change-Id: Ie127fe15191cb3951cff223adc8dc3172188c789
The algorithm to search for points of interest will miss some. We reduce
the step to make it more precise, so that tan(x) and tan(x-90) have the
same profile.
Change-Id: Ia1bac1d4e7b98d2d6f36f8ce12ed9dac67d40198
The angleUnitVersion check is no longer needed, as changing the angle
unit with a trigonometric function set would leave the cursor hanging.
Change-Id: I17d99c05daeacfec953865158cdfe7706635cd32
The cursor now initially aligns with the grid, and tries to avoid points
where the function is not defined.
Change-Id: Ie3b304281f5848102c2f3c0aa5c031b351418186
Allow removing empty columns with backspace, the same way one can remove
empty rows. This allows deleting the internal columns that are not
automatically deleted.
Change-Id: I52def7939257942a8396721d01c4d1531ef90361
Empty columns and rows are only removed automatically when they are the
last row/column. This way, the user can edit a median row/column without
the matrix collapsing.
Change-Id: If611fa0133f270d785809d433ae879879b6b093f
When entering the Navigate menu, a portion of the Y axis is memoized to
preserve the grid units.
However, this portion was not modified when zooming, causing some
glitches.
Change-Id: I06b4ee044eaa75d48b8f338c9ef6ea33bb299e39
If the user opens the Navigate menu, then closes it immediately, the
Auto status is not turned off.
Change-Id: I2d1ca0cfdae1b9c957dede7bf9f3c2890dea1bb0
When using the Navigate menu on graphs, the grid units are computed
using the normal graph's range, so that the units won't change.
Change-Id: I8ff8853868e5c90319619a6271d6a7d87ae82ab0
UnitConvert must set UnitConversion to None, otherwise the unit asked
for in the conversion might get changed after being properly set in
UnitConvert::shallowBeautify.
read in the while condition without being set to an initial value
(if the first ridderApproximation was undefined for instance)
Found by clang-analyzer
Scenario: (with the current auto zoom algorithm)
Graph f(x) = x! -> Auto axes are x=[-13,17647;13,17647],
y=[3628793;2628807]
Press "0" "EXE" to go to x = 0 -> Axes are x=[-13,17647;13,17647],
y=[-0.8612717;13.13873]
Press auto
Press "0" "EXE" to go to x = 0 -> the assertion about KDCoordinates
breaks.
To check whether an ExternalText could be written with Epsilon's fonts,
UTF8Helper made a reference to Kandinsky, which is prohibited. This
check is now done in Escher, before dispatching the event.
Change-Id: I55e9db1ba43c3115775499db47b90a6bdd7cc7b3
Fixes the following bug :
- Plot ln(x) (or any other curve that's normlalized by default)
- Go back and replace ln(x) with log(x) (or any other curve that's NOT
normalized by default)
--> The 'Equal Axes' button is still on.
Change-Id: I0ef50dc9866e908894bd4f5c3ade198f9b3ea318
Change the way the clipboard is fetched, so as to preserve the
Poincare/Python translation feature, and remove the cap on the length of
text being imported into the simulator.
Change-Id: I0f3e83c0c8aa4b64eb08d882aa6891b31f191e22
Wrote methods for accessing the system clipboard from the web
simulator, as the methods in SDL_Clipboard do not work when the video
device uses emscripten.
Change-Id: Ib2e66530a6b013eca0cf69fb52372e9e3a21c8bb
Add methods to interface Epsilon's clipboard with the system's when
running a simulator.
Note that the clipboard still uses a buffer located in the
Escher::Clipboard class, as some features require a buffer to execute
computations on the clipboard's content.
Change-Id: I14c19615805d38735e64d481c617863db22db9bc
The size of the ExternalText events shared buffer is now defined as the
size of the SDL_TextInputEvent 'text' field, as it should.
Also fix a wrong parameter being passed to a strlcpy.
Change-Id: I6a57d49d61fec8a009c4711efce564c65544e571
Generate an ExternalText event when catching a SDL_TextInputEvent whose
text cannot be boiled down to one of the regular events.
Change-Id: I036fa2a153c8351979521d7f8cba6b62aa64604b
Added an event to represent the typing of text that is not on the
device's keyboard. ExternalText event's text is read from a buffer, that
will be filled when the event is generated.
ExternalText only exists on the simulator.
Change-Id: Ie78d2c7c2de91da986a1ce2130a5ecd123db48ee
A previous fix to prevent AlphaLock from interfering with the long press
feature broke the long press selection. Revert the changes and find
another solution to the previous problem.
We compare the alpha status to both the state of the Alpha key and the
Lock, which makes sense : Lock is supposed to mimic Alpha being
continuously pressed.
Change-Id: I1349eb83f8971d3a5efcb10de020bb6c0aed64a1
Checking wether the range that has been computed is suitable is now
done in Poincare::Zoom by SanitizeRange.
Change-Id: Ib7ff73a3beae29996b1a773744021ad85c6ba946
Create a method to clean up an ill-formed range, ie a range whose bounds
are not finite, or where max <= min.
Change-Id: If4525e65f95385cfa970be72bbcc21ad84286bfa
This method, that prevented the graph from panning when moving the
cursor for the first time, caused more problems than it solved.
For instance, the graph for 1/(1-x) was not symmetrical because of it.
Change-Id: Ibb22e38ec0ace6b219c0e42dda481c98b5f717f0
Rework the logic so that :
- an undefined function will be displayed with a clealry defined
null range.
- display both an undefined function and a correct function at the
same time will not affect the correct range.
Change-Id: Ife9dc0d2ace667cab5a6b8826347078fca33e4d5
Method yForCursorFirstMove is supposed to expand the window so that the
first move of the cursor won't cause it to pan. It now filters extreme
values to prevent the original window to be totally squashed, such as
with the drawing of e^x and (x-100)(x+10) at the same time.
Change-Id: Icd6c26b01475a112c4231f293e03ab31d80d5e51
Add a clause in InterestingRangesForDisplay to detect strong variations.
This improve the graph for x^x or x^2+x+1 for instance.
Change-Id: I74214c2382cfe4b0e2603556dd8c6cbd450effc0
Added a tolerance when checking orthonormality, so that ranges that are
nearly orthonormal will be made orthonormal.
Change-Id: Ie3bf076086561e3ff6374e7daa9dd1a884c52d5a
When displaying f(x) = undef, the range now defaults to an orthonormal
range, centered on the origin, with axis unit 1.
Change-Id: Ie3515be0572af4849b8ebd113449f4444755b34f
Restore the permanence of the cursor between accesses to the graph
window.
The cursor used to be reset when the models had been modified. As there
is no longer a system in place to track these modifications, we manually
check if there is a curve beneath the cursor before reseting it.
Change-Id: I6f71fc17744b5bf1ee552c82126bb4a08b823629
Change some parameters to improve the output of
RangeWithRatioForDisplay. Notably, change how the size of the range is
weighed.
Change-Id: I7695c61c3f93482f3fed9c7d2183642573b02cff
When looking for a range with a certain ratio using
RangeWithRatioForDisplay, instead of looking for ranges of the form
0.01*1.1^n, search for ranges of the form a*10^k, with a being either 1,
2, or 5.
Change-Id: I2eaa229574a9a6aa4afa6eb1a3d57365d3d52801
The normalized status would not be refreshed after a call to setDefault
triggered by InteractiveCurveViewController::viewWillAppear.
Change-Id: I923ef3ca0585dbcc1f32b992d7dd1f4a3a206532
The method FunctionGraphController::yRangeForCursorFirstMove expands the
Y range to include the values of the first cursor moves on the left and
the right of the center. It has been modified to preserve
orthonormality.
Change-Id: I898ab9721e45e2acde261f8b94b80cab81b39a92
Added a method to Zoom to set a range to a specific ratio. This method
is used by InteractiveCurveViewRange::normalize.
Change-Id: Id3029439294ece02ea19fb6c6de90b9edc85d771
As margins are added later in InteractiveCurveViewRange::setDefault,
rounding abscissa at this point is premature.
Change-Id: I411dd014b712649efd55cb995ed7a9c5c14a7f43
The ability to perform a range search without changing the X range was
only there to accomodate the Yauto feature.
Change-Id: I8c2b61b447fbd3dc1f4e303dff06d1a8d6e7a4f2
Regression's automatic Y range used to rely on the Yauto feature. Since
it has been removed, it is now done in Store::setDefault.
Change-Id: I1b6653bb8ebe0ba99decff05bae29bd5a69a9f6c
The computation of Sequence's graph default Y range used to rely on
Yauto. As this feature does not exist anymore, this work is now done int
Sequence::GraphController::interestingRanges.
Change-Id: Idba8560d5f25d0bf34dd0e1dd98c2af67f427709
The Auto mode for curve ranges must be deactivated when moving the
cursor outside the screen and when activating navigation (formerly
Zoom).
Change-Id: I281a1d069c2ebcc30e7ead469c4f48438054d7c2
This method of InteractiveCurveViewRangeDelegate was only used to
compute the Y range when Yauto was on.
Change-Id: I9b688a87e16fc58c7d2b00eb071076b98f945df6
The graph range used to be reset to default whenever all functions were
modified. As we no longer want to reset the range without the user's
input, we do not need to track whether the functions changed at all.
/!\ As of this commit, there is no longer a way to restore the default
zoom, until a new automatic zoom button is added.
Change-Id: Ie74e8fd61e13055fa6ce2b2d1e883182d4ecffce
The banner used to display u(n+1)/u(n+2) if the sequences were not
explicit. This was incorrect and fixed
Change-Id: I59100942b51f4170d9662a6fd7b82d0f7e50ae6f
Forced the top cell of the country table to be cropped in the middle,
cutting the text, to avoid the cell looking squashed.
Change-Id: I4d126ed19249f47652bd7f2001384b2491cfe6f8
This fixes the following bug :
(Anywhere with a movable cursor, like a table, a text field or a curve)
- press Alpha (once, or twice to activate the lock)
- keep pressing a direction
--> The cursor would only move once.
Change-Id: I46115d1a31ced244615bfdfe08f37dfe7e918d6e
- Create a first-order recursive sequence
- Select u_n -> Sequence type
--> The second line will be selected, as expected.
Change-Id: I2025ebaa9a7b49ee33ff5e63a4c767a858b46850
'Metric' is used to label the toolbox sub-menus containing metric units
when the selected country uses the imperial system.
Change-Id: I6f40bcd3151be614a5a02cdd17c70ea4a91bfc00
The layout of the unit toolbox changes depending on the unit system in
the selected country.
All units have been rearranged by increasing order of magnitude.
Change-Id: Ib51759cca88fd6b6122dd5a3a25b8ed04024aaf3
Some nodes of the ToolboxMessageTree can be marked as "forks",
dispatching one branch or the other depending on preferences.
They are used in the Unit menu to provide a different toolbox depending
on the unit system.
Change-Id: I591f7abc3d24e682e827a540a9defac1877871b5
The children of a ToolboxMessageTree object can be stored as a simple
pointer, representing an array of all the children stored consecutively,
or as a double pointer, representing an array storing the addresses of
all children.
Change-Id: I10134684963aaafc635aaf9a2374d0f3c32d3d0c
Aligned the top of the degree symbol ° with the top of capital C and F,
and reduced its right margin.
Change-Id: I63f50654afd965186400e451d71be41add9556c8
In Calculation, keeping the BACK key pressed can lead to iffy
simplifications and uninitialized expressions beign passed to
ShouldDisplayAdditionalOutputs and SetAdditionalExpressions methods.
Change-Id: If248ab193c471ff433828fc841e01a391e0c052d
Additional results are proposed for all units combinations that include
a non-base unit, in addition to units with special results.
Change-Id: I91f2a1a43c72bad0327132396534a223e87b06a2
When tuning the representative without tuning the prefix, the prefix
would not be reset to its default value, causing a problem for masses,
whose base prefix depend on the representative (k for grams, none for
the rest).
Fixes a crash when typing sqrt(_N) with country set to US.
Change-Id: Iade900de5fb31e06fdfafef34ae27da3f36983fa
In metric, sqrt(N) would be simplified to _N_kg^-0.5_m^-0.5_s instead of
_kg^0.5_m^0.5_s^-1.
We solve this issue by preventing simplification using derived units
in presence of rational exponents.
Change-Id: I97118bb32c963809c8d176b7b297d1682965e9af
When launching a firmware without onboarding, starts with International
selected by default instead of Canada.
Change-Id: Ice5cde4210c4c2934c909d97296460707343773f
In Trigonometry::shallowReduceInverseFunction, the reduction of
atan(1/x) used the hard value of pi instead of its equivalent in the
selected angle unit.
This fixes a bug causing atan(1/tan(40°)) to be equal to π/2-40 instead
of 50.
Change-Id: Ifd7df5cd168fadf3146eee168c0bc2136ea15a7b
Units with the same name in all available languages have been moved to
the new file toolbox.universal.i18n.
Change-Id: I82ef362ca335dc61da5f3bca67714a9ae409793d
After parsing the .i18n files, compare the messages and raise an error
if some of them could be factored into a universal file.
Change-Id: I0dcfe309dc4c310555a0ea16b6d1680e51a8e87d
When choosing a language and then pressing back from the country menu to
get back to the language menu, the previously selected language remains
selected.
Change-Id: I018c51cce09d47b15bb4864c135d381a94b2a72f
Do not display the regular view when the main view takes up all the
frame.
This fixes a bug causing the language menu to be briefly visible before
the logo on start-up.
Change-Id: Ia2de44de52ac6f852e0eca05101587042f02913b
u(n+2) = u(n+1) + u(n) + u(2)
u(0) = 2
u(1) = 2
Crashed because the global context was not checking if the sequence was
badly referencing itself
Change-Id: I97f694955e15518bb088db50deb761d7ee09d75f
char buffers m_distribution and m_calculation had too weak an alignment,
causing a crash when starting the web simulator.
Change-Id: Ibfd3c2582bc4de97beb4d6cc51b9fb86300edb5e
Cache did not check that the step was the same before panning, causing
old values to remains cached.
e.g. :
- Type f(x) = x, and plot it.
- Go to Axes, and set Xmax = 0.
- Confirm
Change-Id: Ie8ed10c336cf517a65f19b05bd14866daf8128c2
Temperatures can be converted to and from degree Celsius and Fahrenheit.
When used in non-trivial calculations, they are always reduced to undef,
as the rules for manipulating relative scales are not well defined.
Change-Id: If59e224a0e7f940b421bc894bbe2279c90f38d04
Fix a bug preventing the cursor from moving to other curves using UP and
DOWN when the y value was undef.
To reproduce :
- In Graph, define f(x) = 1 and g(x) = ln(x), then draw the curves
- Press DOWN to select g
- Press LEFT until g is not defined anymore
--> Pressing UP or DOWN won't allow you to select f
Change-Id: I79ed4a57b78ac0b8dac3f66e722e358bd4be18d9
Fixed issues due to copy/paste of empty formulas. When pasted, empty
formulas are now recognized by the parser and apear with the
correct layout
Without this process, copying an empty integral then pasting it gives :
int((), x, (), ()) instead of drawing an empty integral
Change-Id: I680aaf4eea953149e2d57efa8153ab4d3f93e2a7
When a formula is pasted in a script or in the shell, some symbols are
replaced by their equivalent in python :
x turns into *
^ turns into **
√ turns into sqrt
etc
Change-Id: If6f2a22d4f3c148c2655e0892023b0e28058a9a6
When selecting a country, the table would be cropped by the text, with
no separator between the white of the cropped cell and the background
color.
Change-Id: Ia6be40bce40b7cdb3efa064989d45ef5c046e364
The solutions of equations that need numerical approximations to be
solved are now computed base on the undeveloped equation (instead of
fully the expended one used to identify polynomials)
This allow (x-10)^7=0 to yield x=10 as result (9.95 before)
Change-Id: Ia8acbe57a9cfebf0b5016e9c896d21c8ddac7a64
Mixed fractions for negative rational numbers are now computed as the
opposite of their opposite's mixed fraction, as is conventionnal.
ex : -9/5 is now decomposed as -1-4/5 instead of -2+1/5
Change-Id: I6df3dce585ccadd1bcd7cc562576995face98f9c
The Equal sign now triggers a syntax error in all apps but Solver. This
make its behaviour symmetrical with that of < and >.
Change-Id: Ia886c547a315d5627a69f3f2acac2cbce0e202c2
Sequences can now be defined using specific terms form other sequences :
Un = n
Vn = u(3)
Initial values can also depend on other sequences.
Should there be a circular dependency, the sequences concerned will
display "undef" as value
Change-Id: I6fe1f3ff7b500f35d480ddefb42de729c327432e
In UnitConvert::shallowBeautify, an orphan expression would be reduced
without reaffecting the reduction's result. The reduction not being
taken into account would cause problem when handling undef values.
ex : Try to calculate i->_min
Change-Id: I4e53afa40ba838fed8c2fba9944c9c9ed1dc95b4
Implemented std::nextafter to replace hand made one.
Methods next and previous are no longer making the difference between -0
and +0
Change-Id: I42e1a073623b70656d9df954694803840cf3088c
The new zoom implemented for ContinuousFunction is now factorized inside
Function to benefit the Sequence class. The same things is done to code
added to Graph::GraphController, which is moved into
FunctionGraphController.
This removes the reimplementation of several methods, most notably
computeYRange, as the implementation for function is general enough to
work on sequences.
Change-Id: I9b8211354064f46c3fa3dde3191dcb39d627a1d2
The auto zoom did not display the X axis when drawing positive curves
with roots, such as sqrt(x).
Change-Id: Ic80fd3207691dc917f7b64c07d7745ab5df1daa3
Additional checks have been added to ensure that the first move of the
cursor from the center of the graph would not cause the window to pan up
or down.
Change-Id: I44d7e86223941076cbf03db7a221e9c0427a64e4
Method characteristicXHalfRange was used to compute the range on which
to display cartesian function in Graph. With the new zoom algorithm,
this method is deprecated.
Change-Id: Ic681fab8d58d0f5628a94302a7b49dacaaa1a6a3
Initial zoom for displaying curves is computed according to the
following rules :
- For polar and parametric curves, the algorithm has not changed.
Vertical and horizontal ranges are chosen in order to display the
full curve with orthonormal graduations.
- For cartesian curves, the horizontal range is chosen in order to
display all points of interest (roots, extrema, asymptotes...).
The vertical range is fitted to be able to display those points, but
also cuts out points outside of the function's order of magnitude.
Change-Id: Idf8233fc2e6586b85d34c4da152c83e75513d85c
In Graph, the weak ReductionTarget would cause _X^0 to not be simplified
to 1, and would break an assertion in
Unit::chooseBestRepresentativeAndPrefix.
Change-Id: I8167a472802baf0a73bf48513f492e78517107ef
Pressing OK or EXE with the brightness setting selected would cause a
crash because of a mishandling of the events for this cell.
Change-Id: I4978b4f749b5f19bc1e49ec05b60a32044d86638
When factoring 1^inf * 1^-inf with Multiplication::factorizeBase, an
Undef factor would appear an be carried into the reduced multiplication.
We escape early in this situation by returning Undef.
Change-Id: Id826ad3cc131349e5bb460f7a8c82fe606294b97
The addSibling method sometimes did not take into account the offset
introduced by adding parentheses, leading to some issues :
- Type 2 SQUARE RIGHTPARENTHESIS LEFT SQUARE. Parentheses are added
but the new square should be outside, between the two right
parentheses.
Change-Id: Ifbc49cee2cd03c4511fc5a678d6d5d42243f4a22
When typing Square in 2D Edition mode, the cursor would not be
repositionned correctly, leading to some issues :
- Typing 2 POW 3, pressing RIGHT to return to the baseline, then
typing POW again adds parentheses around 2^3, as is mathematically
correct. Typing 2 SQUARE, then POW, would show 2^2^_, while
the user really typed (2^2)^_.
Change-Id: I29c01d964924907a1866490189ea56e40771521d
poincareCircuitBreaker requires the Back key to be pressed for at least
50 ms before interrupting a computation.
This is effectively invisible for the user, but fixes a bug in
Calculation :
- When leaving the additional results for a result using units by
pressing the Back key, a reduction preceding a call to removeUnits
would be interrupted, causing an undefined behaviour.
Change-Id: Iec667ae964f190de2171850cc22e1726959e6cb5
After choosing a language at onboarding, the country menu now has a
specific country selected by default (Spain for Spanish, Italy for
Italian...)
Default countries are specified in apps/language_preferences.csv
Change-Id: Ia6392aceb9bebf7e62a692c5a79eb8c4d7b71a9d
With the imperial system selected, volumes are expressed as volume in
Calculation's results, instead of cubic lengths.
Change-Id: Ib6c0a1a595dce8ae8db6371b41af818b3fdc6236
In additional outputs, a volume is now splitted as :
_gal+_qt+_pt+_cup
instead of :
_gal+_cup+_floz
Change-Id: I5020afbab23be6331d8a8742fd6295db178f0b37
1. Information about a unit's dimension now uses inheritance.
_m is an instance of DistanceAlias, which is derived from Alias.
A UnitNode now keeps a pointer to an Alias and one to a Prefix.
All aliases are still defined as constexpr.
This cleans up a lot of the code used namely for computing the
additional outputs in Calculation.
2. Instead of being defined with a string, each unit is described by its
ratio with the base SI unit (ex: _L is 0.001 instead of "0.001_m^3").
This greatly speeds up the calculations using units, as the algorithm
to find the best unit used to parse the definition.
Change-Id: I4d6ed6ad4cb967026a3f01a335aec270066e2b9f
The symbol for pint (_pt) conflicts with the symbol for pico-tonne. To
solve that, prefixes for tonnes are now restricted to the positive
prefixes : k, M, G, T.
Change-Id: Ie968374bbb5e0ebd2c0f08e4b1bdc1708eb6a041
Instead of relying on the order in which the apps are passed at compile
time, the look of the Home app is defined in a config file, and depends
on the country chosen.
Change-Id: If7f56a284e0001d6d75ece1e7efdf5fd1d0a9978
The additional results on units now include conversions into both unit
systems (metric and imperial).
Change-Id: Ie0f12eb3735e775560b66c2cbd78bc9a659145bb
Added methods to return the standard format for each dimension,
depending on the chosen unit system.
Change-Id: I3591a806beca315674cc09093b57e8753db5db6a
A split (such as _h+_min+_s) can now be generated for distances, volumes
and masses using imperial units.
Change-Id: Ib3ad63614979eddd02fbe0e99f16cf09dcf7c1fc
BuildTimesplit (used to create expressions of the form h+min+s) is now
based on the more general BuildSplit.
Change-Id: I3e55359cc6b9735269140942b29bd1d364fc35e7
When the country is USA, the units will be simplified to common imperial
units rather than metric.
Change-Id: Ia533527a429ac26526380e324b9543b359f3b400
Classes LanguageController and CountryController have been fused into
one class LocalizationController, as they were very similar. This allows
the Settings and OnBoarding apps to only keep one controller for both
functions.
Change-Id: Ic23f300c37122249d34caaf18a633b5815240a78
Instead of being hardcoded in the python script, preferences specific to
each country are defined in the country_preferences.h and .csv files.
Change-Id: I71e276341e1586935b4d5814be5b1be80fa170a0
Each country comes with an set of preferences, built at compile time by
apps/i18n.py, used to define :
- the exam mode
- the method for computing quartiles
- the unit system in which to output the results with units
Functions to access those preferences are available in
via sharedGlobalPreferences.
Change-Id: I220ebaa9b9e8954dfe33cd51936f47505b98978d
The new units are :
distance mile, yard, foot, inch
mass pound, ounce
volume gallon, quart, pint, cup, fluid ounce
table spoon, tea spoon
Change-Id: I6864067a1822a077764ed3b61fc46004732e9447
As some definitions now depend on the selected country, tests for the
statistics app now check that the right method is used for each country,
and that each method yields the correct results.
Change-Id: Ia5ad091136746f3284f7524376301fac0c582364
Implemented a new method for computing quartiles, used for all countries
except France and Italy. Quartiles are now computed as the medians of
the lower half and upper half of the dataset.
Change-Id: Idfb89a617799eca1d23326ebbcfbbea58e6236b8
The Dutch exam mode is now only accessible when the selected country is
Netherlands on an official firmware.
Change-Id: I6d70f79b6e728482d8c7d86ef6a2e5c53ee18a39
Added a list of supported countries to I18n, and created messages for
each country's names in each language.
Change-Id: I1b887d75da980d99e21f89cc151249e42c78de88
When opening the window for choosing the regression model, the row
corresponding to the currently selected model will be highlighted.
Change-Id: I65772186fc302c3706a5571f98ecff620e4a8ca9
Multiplication::privateShallowReduce can create an Undef node by
multiplying 0 and inf. In this case, we set the whole multiplication to
undef, to avoid things such as undef*π.
This fixes the following bug :
- In Graph, enter i*inf*π as one of the bounds. An assertion fails in
Multiplication::removeUnit.
Change-Id: Ie9d0d561d6e310f52220b98541f22a4b5e56762c
This fixes the following crash: when reloading the cell before
initializing the m_textFieldBuffer, TextField::ContentView::text() will
use the content of the uninitialized m_textFieldBuffer to compute the
minimalSizeForOptimalDisplay.
Changed previousNestedIntegral method to prevent integrals located in
integral bounds to be considered as nested.
Change-Id: Id8cc4369f53c278ac59039fde1c2818af2ccacab
In stats when selecting an action on a column, all actions listed after
the one selected were applied. Adding breaks to the switch solved the
issue
Change-Id: I4a2f8a41f734a209abb17e76388eed551bf1769c
Some code to prevent the input field from scrolling when switching to
the history in layout mode causes problems :
- With a calculation in the history, type an empty matrix or fraction.
Then with the cursor on an empty square, go to the history. The
square will appear shifted to the right.
Change-Id: I72ebee675215dc3c3a3f8432890f6fee820ef5c9
Calculation's input is now only saved and restored when the app truly
closes or opens, instead of whenever the EditExpressionController enters
or leaves the responder chain (which also happens when the user switches
to the history or the toolbox, or triggers a syntax error).
Change-Id: I8404f1bc5619bcbc03272b406962d284fe25f7e2
Float<float> and Float<double> used to share the same expression type
(Float), and the distinction was made by comparing their size. However,
due to padding, their size could be the same, leading to some issues :
- On the simulator, in Calculation, type 1_mm^3 and go to the
additional outputs. One of the results would be -0.0003081979_µm^3.
Change-Id: Ic8f9328bf462104776fbab636c34d0d152cd7e58
This fixes issues #1541. Formulas as asin(sin(X)) with X a large number
were failling to simplify themselves into the image interval of asin
ex : previous version asin(sin(6)) = 6
new version asin(sin(6)) = -2pi+6
Change-Id: Ia6200b67914224cecd2cd943bcf9bc2ff6e0447a
To prevent incorrect approximations, such as cos(1.5707963267949) = 0, we lowered the precision value. This way,
the approximation is more selective. However, when ploting functions such as e^(i.pi+x), the float approximation fails
and therefore, the function appears "undef".
As a result we created two functions Epsilon that behave differently according to the number's type. When it is a double,
we want a maximal precision -> epsilon_double = 1x10^(-15), and when it is a float, we accept more agressive approximations
-> epsilon_float = 10 x 1x10^(-7).
Change-Id: I844ac52ade665f51fe6888db38f4485c193286d9
Removed limitation in calculation of normal_distribution. It was used to
speed-up computation but yielded 0 for small values.
Previously P(X<5) with X->N(7,0.3162) gave 0 as a result
now it gives 1.26e-10
Change-Id: I3f1c997dfe2ba6424b372a0a82af6d9871443657
Changed dumpLayout's name to moveCursorAndDumpContent, as the name
suggested the method was only usable on layouts (while it also works on
text). The method is also no longer marked const, and the previous name
could imply that it had no side effects.
Likewise, renamed restoreLayout to restoreContent.
Change-Id: I46b320e74c07b48e256dc2146f9ecc15af38a8e6
When closing and reopening Calculation, if the cursor was on an
EmptyLayout, this layout would be invisible, instead of being denoted by
its usual yellow square.
This also fixes a bug that would leave the grey squares in matrices when
leaving and reopening the app, causing a failed assertion on the simulator.
Change-Id: Ib723797c079f1441f5cde174aa5c492ad4226335
Closing the Calculation app because of a full pool would crash the
device, by attempting to dump a layout with no node.
Change-Id: Ic926da61ae93f47eb576848788e1de5e3f94f5bb
FLT_EPSILON is now compliant with the definition : the difference
between 1 and the next representable float.
Change-Id: I4f79c3eee93447e76893d850bd84265c9d45aca5
This fixes a bug where, when drawing 1/x, a vertical bar would appear on
0, because of false positive cache hits.
Change-Id: I2eafeac5e254c8a556769a41c8edc532db44383a
Instead of being memoized all at once before display, functions values
are now stored at evaluation time. Fixed some quirks with caching
preparation.
Change-Id: I5d212c271c8c41a6dc9074a15c720f0bccf8ac40
The caches used for function values memoization are now stored in
ContinuousFunctionStore : there are now only a fixed number, instead of
one per function. This effectively enables caching only for the first
few functions on screen, while reducing the memory usage.
Change-Id: I2ade091717f73a14a756fe527c773db8e8627be7
Added a default argument to CurveView::drawCurve : a function to initiate the
memoization of continuous functions. The function is implemented in
ContinuousFunctionCache and provided by GraphView. This should be invisible
to other types of curves that rely on CurveView::drawCurve.
Change-Id: I59aa55d67154b6d4bf9614b7ed87c48408773d86
When evaluating a ContinuousFunction for a float value, the function
will first try to ask its cache (if it has been filled beforehand).
Change-Id: I519d2d3dcf344ba63e30a0f011db2306c7141315
ContinuousFunction now has an attribute of type ContinuousFunctionCache,
implementing methods to store and retrieve 320 float values, in order to
speed up function display in Graph.
Change-Id: I6f7ccdf3ae3c6dd8b08b93d786c8d0be7aa4dee8
Method InteractiveCurveViewRange::panToMakePointVisible now moves the
range of a whole number of pixels when panning horizontally. This allows
the cache of cartesian functions not to be invalidated.
Change-Id: Idb9904fef134dd13458e1f2287b0fe5145e8aec7
It appeared that without the packed keyword, the compiler did not handle
access to unaligned record data members, which leads to crashes on the
device.
Change-Id: I401f075e7f62458a4733baa8d81983d4be34b730
We now compute the value of the mantissa in double (instead of float)
to limit conversion error occuring for big numbers.
Change-Id: Ia61c052f0bc4a9196c53e2c7900eb48e3343d39c
New way of drawing sigma sign. Only a single branch is stored. The full
symbol is created by mirroring half a symbol.
Change-Id: I0fc32393203e51578c88b01125a907d402291534
Changed the look of the integral symbol and the positions of the upper
and lower bounds. Added a drawing of the window to explain the meaning
of various margins.
Change-Id: I3ffc07848dc9ad68dce3c0e01853d548e31dd152
Parenthesis collapsing is no longer handled by LeftParenthesisLayout and
RightParenthesisLayout, but by ParenthesisLayout itself.
Change-Id: I6797cd40ee02881544e01e9b88f31a597c51d179
Fraction are now only collapsed if they are the first thing to be
collapsed or if a parenthesis is open.
Change-Id: Ie7f3a99498b9981dff70221efd7de6bee6d0c379
When leaving the Calculation app, the layout currently being edited is
now stored in a buffer, to be restored when the app resumes.
Change-Id: I59c16e18f7193bdcbb36888b54cb2722897f85f5
Added some methods to manipulate the layout of a LayoutField from an
ExpressionField, like storing into and restoring from a buffer.
Change-Id: I7b7b5b53626f19237a5215bd196e897a518e9577
Created function Layout::LayoutFromAddress, which creates in the pool a layout
that has been stored in a buffer. Functionally identical to
Expression::ExpressionFromAddress.
Change-Id: I204e6b7d42f259ef2732563aa2a168a644060867
The cacheBuffer from EditExpressionController has been moved in the
snapshot, to act as a zone where layout information can be kept while
the app is inactive.
Change-Id: If9206abf77f37d6b984826e5f09658848381a75f
Changed TextFieldFunctionTitleCell::reloadCell to solve an issue with
the alignment of a function's name and definition when changing the
expression :
- typing u_n = (1/3)/2 then changing to u_n = 1/(2/3) without erasing
the formula first. u_n would no longer be aligned with the = sign.
Change-Id: Ib58e4220dc67c77639272c7ea784418bddffb432
SequenceTitleCell::reloadCell now triggers a layoutSubviews, causing the
vertical alignment to be recomputed. This solves issues regarding the
alignment of a sequence's name and definition, such as :
- typing u_n = v_n ; v_n would be displayed above u_n
- typing u_n = (1/3)/2 then changing to u_n = 1/(2/3) without erasing
the formula first. u_n would no longer be aligned with the = sign.
Change-Id: I4a771d96ea79e42e2f4822e93f9f1cbbcf867610
LayoutField does no redraw its content on every occasion anymore. This
allows the input window in Calculation to not scroll to the beginning
when writing an overly long formula.
Change-Id: I14276828884035463b0a6438bfca4dd76c7f5057
New tests compute derivatives while replacing symbols with their definitions or undefined, as the device does.
Change-Id: I99179bf6540182ff929938fb96a00a1ed2fbcf49
Derivation now computes as expected on logarithms, as long as their base is not a function of the derivation variable.
Change-Id: Ia56da1c1151c0ddf3887be84ddb4bd02664c5188
Added a method unaryFunctionDifferential to ExpressionNode and Expression, to be implemented by subclasses representing unary functions.
Added a function derivateUnaryFunction to Derivative, to factor (f°g)' -> g' * f'°g.
Change-Id: Id1780f1082ccd001f1282fe4ddfff2b7055d3a27
Derivation now propagates to powers as expected, whether the base, the exponent, or both are functions of the variable. This also makes division derive as intended.
Change-Id: I51cbd5f7ec9f6aaa1df068625bbda1437941fa08
Derivation propagates as expected on multiplications (but not power). Some tests involving diff had to be updated to reflect that behaviour.
Change-Id: Ifa32031bc37a156c18d296757bcdd6ccdb0ea43e
Number's subclasses, with the exception of Undefined and Unreal, derive as zero. Symbols derive as expected. Derivation propagates as expected on additions.
Change-Id: Icedbb1dfac8099347a19c14bf2537011b2e8b199
This method is to be implemented by derivable expression subclasses, for use in Derivative::shallowReduce. It performs the calculation for the derivative, and returns whether calculations happened.
Change-Id: I13cdb131e2044578392f5178a9f389314c1c4c8a
-No more limit to the number of calculations
-All calculations are memoized
-Added tests to test/calculation_store.cpp
Change-Id: Ia10e2b009576eaf4496ba44a0c88f6e7e76f6cef
Add the possibility to use a double-typed evaluator when tracing a
curve, useful when errors caused by float approximation mess with the
drawing.
Change-Id: I3ab410deec4823149239b0a26b1885fd2a493226
This fixes the following bug: add the sequence, u(n)=2^n. On the graph,
go to "sum of terms" and try to sum terms from 0 to 18 by moving the
cursor. It hangs.
A check for interruption in ConsoleController::printText caused script
to immediately stop when launched after an interrupted script.
This check was used to break out of infinite print loop, but now
becomes redundant with how micropython_port_vm_hook_loop was changed.
Change-Id: Ifa8d415e1b2c2406ad67300eb14ce46889af296f
Keyboard interruption used to be checked once every 20000 calls to
micropython_port_vm_hook_loop. However, if costly functions were
executed in between calls to this method, the delay for activating
interruptions would increase.
Now, keyboard interruption is checked after a fixed amount of time has
passed. This way, if the process waits a long time between two calls
to micropython_port_vm_hook_loop, it is still interrupted in a timely
manner.
Change-Id: I37ca3bd4a996fa086078f504340dd857526e356a
Additional checks for interruptions were making the kandinsky module
slower.
/!\ Some scripts are now very difficult to interrupt
Change-Id: I4c18273d8895deaac68084411a52556c8459d52b
When computing the barycenter between two colors, the some of the two
factors a and (1-a) was equal to 255/256 instead of 1.
Change-Id: Ia9a779d43470ef42d9430ad730e842da0f007140
KDColor::blend used to produce different colors when blending two
identical colors (ex : use draw_string in Python to print white text on
a white background).
blend now escapes early when its two color arguments are identical.
Change-Id: I01dc5a0d5e4e6a20e09fee0f346dafc313dae97b
If an expression hasUnits and is then reduced, it might not have units
anymore for instance if it was replaced with undefined).
Scenario: Enter "[5000000000000000]^20 _s" in the calculation app
Without this change, we would get weird "reduced" expression, such as
multiplication(undef, _s), but we do not always check
sSimplificationHasBeenInterrupted afterwards.
computed when the calculation is added to the store and don't change afterwards.
Otherwise, if their heights change when scrolling (due to a modification of the
display output type - ExactOnly, ApproximateOnly...), it generates crashes.
calculation height memoization. They're computed from the layouts which
don't depend on the complex format (or any other settings parameters
which could have changed).
deleting row
This fixes the following bug: input 1, OK, 1.2 OK, delete the row whose
input is '1' with the selection on the output view. The output of 1.2
does not toggle and it should.
- "echo 'deb http://httpredir.debian.org/debian jessie main contrib \n deb-src http://httpredir.debian.org/debian jessie main contrib \n deb http://httpredir.debian.org/debian jessie-updates main contrib \n deb-src http://httpredir.debian.org/debian jessie-updates main contrib \n deb http://security.debian.org/ jessie/updates main contrib \n deb-src http://security.debian.org/ jessie/updates main contrib ' > /etc/apt/source.list"
> Don't understand french ? speak english ? here's the [english README](./README.md) !
## À propos
Omega est un fork d'Epsilon, l'OS de Numworks tournant sur les calculatrices du même nom, qui apporte beaucoup de fonctionnalités en plus. Omega est fait pour ceux qui aimeraient ajouter certaines fonctionnalités ayant été rejetées par Numworks à leurs calculatrices (pour des raisons 100% compréhensibles !). [Essayez en ligne](https://getomega.web.app/simulator).
### Quelques fonctionnalités supplémentaires
- Retour du calcul littéral
- Une application RPN
- Application Externes
- Des thèmes
- Python amélioré (module os, méthode open...)
- Un tableau périodique et toutes les masses molaires des éléments dans la toolbox
- *Ainsi que d'autres à découvrir...* [Changelogs complets](https://github.com/Omega-Numworks/Omega/wiki/Changelog) | [Fonctionnalités princpales & captures d'écran](https://github.com/Omega-Numworks/Omega/wiki/Main-features).
## Installation
### Automatique
Vous pouvez installer Omega automatiquement depuis [notre site](https://getomega.web.app/) sur la page "installer".
make OMEGA_USERNAME="{Votre nom ici, 15 caractères max}" -j4
make epsilon_flash
```
Important : N'oubliez pas l'argument `--recursive`, Omega a besoin de sous-modules.
Vous pouvez aussi changer le nombre de processus parallèles pendant la compilation en changeant la valeur suivant `-j`.
</details>
<details>
<summary><b>Fichiers binaires</b></summary>
Ces fichiers peuvent être utilisés pour distribuer Omega (pour que tout le monde puisse le flasher via [Webdfu_Numworks](https://ti-planet.github.io/webdfu_numworks/)).
make PLATFORM=simulator TARGET=web OMEGA_USERNAME="{Votre nom ici, 15 caractères max}" -j4
```
Le simulateur se trouve dans `output/release/simulator/web/simulator.zip`
Important : N'oubliez pas l'argument `--recursive`, Omega a besoin de sous-modules.
Vous pouvez aussi changer le nombre de processus parallèles pendant la compilation en changeant la valeur suivant `-j`.
</details>
<details>
<summary><b>Simulateur 3DS</b></summary>
Vous aurez besoin de devkitPro et de devkitARM disponible dans votre `$PATH` (instructions [ici](https://devkitpro.org/wiki/Getting_Started) (en anglais))
Omega est un fork d'Epsilon, un système d'exploitation performant pour calculatrices graphiques. Il inclut huit applications pour les mathématiques de lycée et d'études supérieurs
Vous pouvez essayer Epsilon depuis votre navigateur sur le [simulateur en ligne](https://www.numworks.com/simulator/).
## Licence
NumWorks est une marque déposée de NumWorks SAS, 24 Rue Godot de Mauroy, 75009 Paris, France.
Nintendo est Nintendo 3DS sont des marques déposées de Nintendo of America Inc, 4600 150th Ave NE, Redmond, WA 98052, Etats-Unis.
NumWorks SAS et Nintendo of America Inc ne sont en aucun cas associés avec ce projet.
* NumWorks Epsilon est disponible sous [Lisense CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode).
* Omega est disponible sous [Lisense CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode).
> Vous ne comprenez pas l'anglais ? vous êtes francophone ? Regardez le [*LISEZ-MOI* français](./README.fr.md) !
## About
Omega is a fork of Numworks' Epsilon, the OS that runs on their calculator, which brings many features to it. Omega is for the people who want to add features to the calculator, but cannot because they have been rejected by Numworks (for reasons that are 100% understandable!).
Omega is a fork of Numworks' Epsilon, the OS that runs on their calculator, which brings many features to it. Omega is for the people who want to add features to the calculator, but cannot because they have been rejected by Numworks (for reasons that are 100% understandable!). [Try it online](https://getomega.web.app/simulator).
## Some new features
### Some new features
- Adding symbolic calculation back into the calculator
- An app for RPN
- Exernal apps
- A theme engine
- New python features (os module, open method...)
- A periodic table app + all of the molar masses for the elements in the toolbox
-More steps for brightness (16 instead of 5)
- ~~32 KB Python heap instead of 16 KB~~ Now available on Epsilon `>=13.2.0`!
- And more...
The main new features are listed [here](https://github.com/Omega-Numworks/Omega/wiki/Main-features), and the complete changelog can be found [here](https://github.com/Omega-Numworks/Omega/wiki/Changelog).
-*And much more to discover...* [Complete changelog](https://github.com/Omega-Numworks/Omega/wiki/Changelog) | [Main new features + screenshots](https://github.com/Omega-Numworks/Omega/wiki/Main-features).
## Installation
@@ -36,12 +37,14 @@ First of all, follow **step 1** [here](https://www.numworks.com/resources/engine
<details>
<summary><b>Model n0100</b></summary>
```
(note: you can change the `EPSILON_I18N=en` flag to `fr`, `nl`, `pt`, `it`, `de`, `es` or `hu`).
assertCalculationIs("int((ℯ^(-x))-x^(0.5), x, 0, 3)",::Calculation::Calculation::DisplayOutput::ApproximateOnly,::Calculation::Calculation::EqualSign::Unknown,nullptr,nullptr,nullptr,&globalContext,&store);// Tests a bug with symbolic computation
assertCalculationIs("int((ℯ^(-x))-x^(0.5), x, 0, 3)",DisplayOutput::ApproximateOnly,EqualSign::Unknown,nullptr,nullptr,nullptr,&globalContext,&store);// Tests a bug with symbolic computation
ExternalAppExecError = "No se puede ejecutar el archivo"
ExternalNotCompatible = "Externo no es compatible"
WithSimulator = "con el simulador"
WithN0100 = "con n0100"
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.