Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
875 commits
Select commit Hold shift + click to select a range
1f27545
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
bd81846
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
cd3734c
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
4ce26cb
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
11628fe
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
71c59c6
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
7990afb
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
5668c4e
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
aa2ec45
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
198223a
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
d84ccbd
Convert all classes to have an uniform prefix: PM (Polymath)
Feb 9, 2017
d165de7
Fix one test
SergeStinckwich Feb 9, 2017
f2292f1
Fix one test
SergeStinckwich Feb 9, 2017
0170701
minor reformatting
SergeStinckwich Feb 9, 2017
ac3827c
minor reformatting
SergeStinckwich Feb 9, 2017
414ba40
minor reformatting
SergeStinckwich Feb 9, 2017
c64c335
minor reformatting
SergeStinckwich Feb 9, 2017
d306c8a
minor reformatting
SergeStinckwich Feb 9, 2017
02fcb1f
minor reformatting
SergeStinckwich Feb 9, 2017
07203b7
v0.71
SergeStinckwich Feb 9, 2017
0bfa5b1
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
539e49c
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
7fd8043
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
9142eef
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
4bf5f6c
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
d0b5aec
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
f591ab3
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
78c27e2
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
7d430e7
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
72afb1d
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
3a77243
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
6f40171
change asDhbVector to asPMVector
SergeStinckwich Feb 9, 2017
93cc6c8
v0.72
SergeStinckwich Feb 9, 2017
8cbf4fd
remove even more dhb stuff
SergeStinckwich Feb 9, 2017
50e8fe1
remove even more dhb stuff
SergeStinckwich Feb 9, 2017
a6d8e5c
v0.73
SergeStinckwich Feb 9, 2017
b0cab6e
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
38c2c0e
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
e55907d
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
dd1c1c5
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
1aa2be3
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
b1609bd
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
e5f3602
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
ecceb38
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
0a86975
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
6bf2aa4
v0.74
SergeStinckwich Feb 10, 2017
a6688fd
Typos in comments
SergeStinckwich Feb 10, 2017
d1bf592
Typos in comments
SergeStinckwich Feb 10, 2017
c1d612f
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
4d4e2a7
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
de7ac23
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
ad6b14e
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
250b1a1
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
ec1ccd7
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
023b88b
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
53c14f7
v0.75
SergeStinckwich Feb 10, 2017
97dd0c9
fix dependency problem
SergeStinckwich Feb 10, 2017
c17989c
move asDhbVector to asPMVector
SergeStinckwich Feb 10, 2017
341a1d7
v0.76
SergeStinckwich Feb 10, 2017
8f09a98
Fix strange problem with name of extensions
SergeStinckwich Feb 10, 2017
2a4184c
v0.77
SergeStinckwich Feb 10, 2017
df79ea5
Try to fix the problem with extensions once again ...
SergeStinckwich Feb 10, 2017
7de8826
v0.78
SergeStinckwich Feb 10, 2017
d8749b9
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
f4e04bd
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
ecc51ff
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
45f39d4
Prefix more classes with PM
SergeStinckwich Feb 10, 2017
29c27f6
v0.79
SergeStinckwich Feb 10, 2017
d642c5d
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
d11d450
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
13a91f2
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
2166fb7
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
09f2278
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
353bf1f
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
46ce54f
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
f9beb4f
Prefix more classes with PM
SergeStinckwich Feb 13, 2017
89a612b
v0.80
SergeStinckwich Feb 13, 2017
4bebe1a
Integrate Math-Core-OrestKupyn.14.mcz
SergeStinckwich Feb 13, 2017
1b69e32
Really integrate Math-Core-OrestKupyn.14.mcz
SergeStinckwich Feb 13, 2017
e5f59f6
fix missing asDhbVector methods
SergeStinckwich Feb 16, 2017
42d6e06
v0.81 release
SergeStinckwich Feb 16, 2017
9960815
Fixed collisions O.Kupyn's methods
Feb 16, 2017
8822e55
created tests for new PMVector methods
KupynOrest Feb 18, 2017
4bb8c8d
Created tests for new methods of PMMatrix
KupynOrest Feb 18, 2017
c0b8c0f
Merge with Oleh's work
SergeStinckwich Mar 13, 2017
fcee680
v0.82
SergeStinckwich Mar 13, 2017
f675639
Add examples of Orest: https://github.com/PolyMathOrg/PolyMath/issue…
SergeStinckwich Mar 13, 2017
6e5721a
add Orest example
SergeStinckwich Mar 13, 2017
f6947a6
Minor refactoring of instance creation class methods
SergeStinckwich Mar 13, 2017
709bfc8
- Minor refactorings
SergeStinckwich Mar 13, 2017
a25d243
Rename trace as tr
SergeStinckwich Mar 13, 2017
e089b93
Use self instead of class name
SergeStinckwich Mar 13, 2017
42aab5d
Minor reformatting
SergeStinckwich Mar 13, 2017
bb0f027
Reformating
SergeStinckwich Mar 13, 2017
eff4189
Rename Math-Test-Matrix as Math-Tests-Matrix
SergeStinckwich Mar 13, 2017
c0d219f
v0.83
SergeStinckwich Mar 13, 2017
f75bd63
Remove some unecessary code in < and > methods
SergeStinckwich Mar 14, 2017
7414ba8
Remove completely Dhb references
SergeStinckwich Mar 14, 2017
c0ae953
Remove completely Dhb references
SergeStinckwich Mar 14, 2017
a378fcd
Refactor some unit tests
SergeStinckwich Mar 14, 2017
3fe2196
Use assert:equals
SergeStinckwich Mar 14, 2017
a6098bb
- use accept:equals
SergeStinckwich Mar 14, 2017
2512179
Use assert:equals
SergeStinckwich Mar 14, 2017
a204a5a
Reformat some tests
SergeStinckwich Mar 14, 2017
405731e
Skip problematic test on mac until we find a fix
SergeStinckwich Mar 14, 2017
75feef6
version 0.84
SergeStinckwich Mar 14, 2017
45f77e2
Rename Math-Number-Extensions to Math-Numbers-Extensions
SergeStinckwich Mar 14, 2017
262aee6
rename Math-Numbers-Extensions package
SergeStinckwich Mar 14, 2017
f7e796b
Fix a typo
SergeStinckwich Mar 16, 2017
46027a4
Remove skip for failing test
SergeStinckwich Mar 16, 2017
8f40db6
one more typo
SergeStinckwich Mar 16, 2017
e845fd0
initialize the seed for random generator
Mar 16, 2017
38fc215
new version with reset seed
Mar 16, 2017
b120a09
rename asDHBVector to asPMVector
SergeStinckwich Mar 18, 2017
81509b4
rename asDHBVector to asPMVector
SergeStinckwich Mar 18, 2017
1e5497e
Don't implement ==
SergeStinckwich Mar 18, 2017
bbeb56d
Don't implement ==
SergeStinckwich Mar 18, 2017
562c5d9
Remove methods sin, cos, tan, sqrt that was already implemented on Co…
SergeStinckwich Mar 18, 2017
31bf0aa
Modify class comments in order to remove DHB prefix
SergeStinckwich Mar 18, 2017
95d88ba
remove sum method already implemented
SergeStinckwich Mar 18, 2017
f1f638a
Correct cumsum for PMMatrix
SergeStinckwich Mar 18, 2017
c756dd2
v0.85
SergeStinckwich Mar 18, 2017
73f7446
v0.85
SergeStinckwich Mar 19, 2017
a1deb4a
Added setDiagonal method (needed for svd working) . Changing in comme…
Mar 19, 2017
74e58c3
v0.86
SergeStinckwich Mar 28, 2017
28b6b69
- added #closeTo: and #closeTo:precision: to PMMatrix and PMVector fo…
May 13, 2017
4c7ab2e
- added #closeTo: and #closeTo:precision: to PMMatrix and PMVector fo…
May 13, 2017
c07b8b1
- added #closeTo: and #closeTo:precision: to PMMatrix and PMVector fo…
May 13, 2017
4234b58
- added #closeTo: and #closeTo:precision: to PMMatrix and PMVector fo…
May 13, 2017
e381f18
Remove obsolete classes
SergeStinckwich May 16, 2017
35754da
Merge fixes from Oleks and Oleh
SergeStinckwich May 16, 2017
a24f1c2
Add Oleh and Oleks tests
SergeStinckwich May 16, 2017
518b088
Release v0.87
SergeStinckwich May 16, 2017
daf8e7e
Merge with Math-Tests-Matrix-EvanDonahue.4
SergeStinckwich May 16, 2017
8a50ed5
Merge with previous versions
SergeStinckwich May 16, 2017
37d5521
Merge with EvanDonahue version
SergeStinckwich May 16, 2017
d62e228
Missing tests are back
SergeStinckwich May 16, 2017
0abe188
v0.88 release
SergeStinckwich May 16, 2017
59c44a5
version 0.89
SergeStinckwich May 16, 2017
e5f4838
Fixed issue #25. PMMatrix>>tensorProduct: should now work as expected
olekscode May 16, 2017
c612884
Removed testTensorProductRandom. There is no need for it in this case
olekscode May 16, 2017
016a684
- Added PMMatrix >> #collect: for ease of implementing elementwise op…
May 17, 2017
7633f9a
- Added test case that checks whether PMMatrix throws a SizeMismatch …
May 19, 2017
0fe3926
- Added test for elementwise addition with PMMatrix via #+
Jun 5, 2017
a44e1ec
Nick add two new tests
SergeStinckwich Nov 23, 2017
05e3d94
v0.90 New version of PolyMath
SergeStinckwich Nov 23, 2017
fb68117
Reformat code
SergeStinckwich Nov 23, 2017
1080ab2
Reformat code
SergeStinckwich Nov 23, 2017
7d64f71
Reformat a little bit the code
SergeStinckwich Dec 12, 2017
bd0f912
Reformat a little bit the code
SergeStinckwich Dec 12, 2017
bf1631e
Reformat and recategorize methods
SergeStinckwich Dec 29, 2017
9623db5
Fix categorization
SergeStinckwich Dec 29, 2017
96d6568
Rename PMVectorTestCase as PMVectorTest
SergeStinckwich Dec 29, 2017
475a643
Refactor PMVectorTest
SergeStinckwich Dec 29, 2017
db0ecec
Cleaning
SergeStinckwich Dec 29, 2017
a8f0a18
More cleaning
SergeStinckwich Dec 29, 2017
a2fdca8
v0.91
SergeStinckwich Dec 30, 2017
41a28cd
First commit of t-SNE implementation
SergeStinckwich Dec 30, 2017
fcb236b
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
6d8ee91
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
c71e0d4
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
a11b84e
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
deb1fac
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
52b516f
Remove copyright information
SergeStinckwich Dec 30, 2017
aadee54
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
d0abbc3
Rename last classes without PM prefix
SergeStinckwich Dec 30, 2017
923efdd
Merge with previous versions
SergeStinckwich Dec 30, 2017
5bbed93
Merge with Math-Matrix-SergeStinckwich.17
SergeStinckwich Dec 30, 2017
9f75e81
Merge with previous versions
SergeStinckwich Dec 30, 2017
083487a
Cleaning
SergeStinckwich Dec 30, 2017
29931be
v0.92
SergeStinckwich Dec 30, 2017
03dbb73
Rename TestCase with correct name
SergeStinckwich Dec 30, 2017
31d91e7
Rename classes
SergeStinckwich Dec 30, 2017
209021d
Rename classes
SergeStinckwich Dec 30, 2017
b34fb65
Rename with PM prefix
SergeStinckwich Dec 30, 2017
e71fb00
Rename with PM prefix
SergeStinckwich Dec 30, 2017
ead8fff
v0.93
SergeStinckwich Dec 30, 2017
a88080d
fix Matrix>>cumsum
SergeStinckwich Dec 31, 2017
a705ddf
Rename PVSDTest
SergeStinckwich Dec 31, 2017
9a64eef
Refactor some tests classes in order to remove some of them
SergeStinckwich Dec 31, 2017
da8a2a2
Tests refactoring
SergeStinckwich Dec 31, 2017
6bbde76
Prefix class with PM
SergeStinckwich Dec 31, 2017
1165cee
Rename tests classes
SergeStinckwich Dec 31, 2017
86b5d67
Add one example of computing Pi
SergeStinckwich Dec 31, 2017
f889510
Remove unecessary copyright info
SergeStinckwich Dec 31, 2017
82a3963
Issue #35 : Remove PMVector from Math-DHB-wk
SergeStinckwich Dec 31, 2017
150c773
Issue #35 : Remove PMVector from Math-DHB-wk
SergeStinckwich Dec 31, 2017
631f66c
Move PMFixPoint to Math-Core-Process
SergeStinckwich Dec 31, 2017
6e3afcf
Remove PMFixPoint and PMMatrix
SergeStinckwich Dec 31, 2017
70e7154
#35 move methods from Math-DHB-wk here
SergeStinckwich Dec 31, 2017
ed39e0c
More work on #35
SergeStinckwich Dec 31, 2017
0f22852
More work on #35
SergeStinckwich Dec 31, 2017
76a3286
remove everything from this package
SergeStinckwich Dec 31, 2017
4f0a1e6
Move a method from package Math-DHB-wk
SergeStinckwich Dec 31, 2017
ab5269f
Remove copyright info
SergeStinckwich Dec 31, 2017
f7791fc
v0.94
SergeStinckwich Dec 31, 2017
4c92981
v0.95 with TSNE
SergeStinckwich Jan 8, 2018
1709404
add one simple example from tsne.js
SergeStinckwich Jan 8, 2018
930c2c9
More work on parameters initialization
SergeStinckwich Jan 8, 2018
fb86f55
Use normal distribution (0,1) to initialize Y matrix
SergeStinckwich Jan 8, 2018
6814a39
Add initial dims parameter
SergeStinckwich Jan 8, 2018
6139d4c
Add initial dims parameter
SergeStinckwich Jan 8, 2018
3ba23a5
2 green tests now
SergeStinckwich Jan 8, 2018
50e0b04
Remove uneeded copyright
SergeStinckwich Jan 8, 2018
f237189
Fix method categorization
SergeStinckwich Jan 8, 2018
ba59992
Add more comment
SergeStinckwich Jan 8, 2018
29aabc7
Reformatting
SergeStinckwich Jan 8, 2018
0db4ca3
Two green tests now
SergeStinckwich Jan 10, 2018
205ab61
The work continue !
SergeStinckwich Jan 30, 2018
7e4ee47
Improved readability of PMSingularValueDecompositionTest
olekscode Feb 17, 2018
fc2268d
Changed Dhb to PM in class comment
olekscode Feb 18, 2018
6978306
Improved the implementation of SVD
olekscode Feb 19, 2018
0dfb4d1
Wrote 14 tests for SVD
olekscode Feb 19, 2018
6d4427c
Changed Dhb to PM in class comment of PMJacobiTransformation
olekscode Feb 20, 2018
cad6619
Implemented eigen methods and updated the implementation of SVD
olekscode Feb 20, 2018
04a11ea
Rename PMJacobiTransformationFast to PMJacobiTransformationHelper
SergeStinckwich Feb 20, 2018
117a567
v0.96 with last modifications of Oleks
SergeStinckwich Feb 20, 2018
c7fbb2a
Tests should depends on classes installed or not ...
SergeStinckwich Feb 20, 2018
8fe41e5
Remove packages tests
SergeStinckwich Feb 20, 2018
034ea21
Remove DHB references and clean tests
SergeStinckwich Feb 20, 2018
dddae4a
Remove reference to DHB
SergeStinckwich Feb 20, 2018
0ba2edd
Rename package correctly
SergeStinckwich Feb 20, 2018
ffd8bd0
v0.97
SergeStinckwich Feb 20, 2018
9e6f5c9
Merge with Oleks
SergeStinckwich Feb 20, 2018
8171f11
v0.98
SergeStinckwich Feb 20, 2018
1ea0c2f
Added methods to add scalar to a vector
olekscode Feb 20, 2018
8ffbba7
Added a test to PMVector for adding a scalar
olekscode Feb 20, 2018
4daaa81
Merge Oleks changes
SergeStinckwich Feb 20, 2018
c68f3f3
Changed + to accept matrix or number
olekscode Feb 20, 2018
2f85c7a
Fized a failing test by signaling a SizeMismatch from PMMatrix addWit…
olekscode Feb 20, 2018
4372f70
Updated class comment for SVD
olekscode Feb 20, 2018
d9cc84a
v0.99 is out
SergeStinckwich Jun 14, 2018
322f60c
Move some classes to Math-Polynomials package
SergeStinckwich Jun 25, 2018
999c059
Move some classes to Math-Polynomials package
SergeStinckwich Jun 25, 2018
62815d5
Move some classes to Math-Tests-Polynomials package
SergeStinckwich Jun 25, 2018
abbf908
Move some classes to Math-Tests-Polynomials package
SergeStinckwich Jun 25, 2018
fefa5f4
Version 0.100
SergeStinckwich Jun 25, 2018
1686722
Missing dependancies
SergeStinckwich Jun 25, 2018
87014a4
Cleaning
SergeStinckwich Jun 26, 2018
b35f37e
Cleaning
SergeStinckwich Jun 26, 2018
9e64727
Move everything to Math-Complex package
SergeStinckwich Jun 26, 2018
afcf755
Move all extensions Math-ComplexExtensions in this package
SergeStinckwich Jun 26, 2018
b67a341
Release v0.101
SergeStinckwich Jun 26, 2018
2d66d84
Remove in loop in ConfigOf
SergeStinckwich Jun 26, 2018
29747e1
Remove packages that are not in BaselineOfPolymath
jecisc Jun 28, 2018
bd28448
Make it FileTree for conversion
jecisc Jun 28, 2018
4a719cc
sources migrated
jecisc Jun 28, 2018
358678e
Make CI use the new repo
jecisc Jun 28, 2018
e86d27a
Remplace Math-Number-Extension by the right package
jecisc Jun 28, 2018
1a9bc8b
Remove FileTree file
jecisc Jun 28, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 3 additions & 5 deletions .smalltalk.ston
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
SmalltalkCISpec {
#loading : [
SCIMetacelloLoadSpec {
#configuration : 'PolyMath',
#repository : 'http://smalltalkhub.com/mc/PolyMath/PolyMath/main',
#load : [ 'default' ],
#platforms : [
#pharo ]
#baseline : 'PolyMath',
#directory : 'src',
#platforms : [ #pharo ]
}
],
#testing : {
Expand Down
232 changes: 232 additions & 0 deletions src/ExtendedNumberParser/ExtendedNumberParser.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
"
An ExtendedNumberParser is extending Squeak number syntax with these rules

- allow partial specification of integer and fraction parts:
1.e2 .1e3 are both 100.0
- allow plus sign before number and in exponent


"
Class {
#name : #ExtendedNumberParser,
#superclass : #NumberParser,
#category : 'ExtendedNumberParser'
}

{ #category : #accessing }
ExtendedNumberParser >> allowPlusSign [
^true
]

{ #category : #accessing }
ExtendedNumberParser >> exponentLetters [
"Allow uppercase exponent letter."

^'edqEDQ'
]

{ #category : #'parsing-public' }
ExtendedNumberParser >> nextFraction [
| numerator denominator numberOfTrailingZeroInIntegerPart |
base := 10.
neg := self peekSignIsMinus.
(integerPart := self nextUnsignedIntegerOrNilBase: base)
ifNil: [numberOfTrailingZeroInIntegerPart := 0]
ifNotNil: [
numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero.
(sourceStream peekFor: $r)
ifTrue: ["<base>r<integer>"
(base := integerPart) < 2
ifTrue: [
sourceStream skip: -1.
^ self expected: 'an integer greater than 1 as valid radix'].
self peekSignIsMinus
ifTrue: [neg := neg not].
integerPart := self nextUnsignedIntegerBase: base.
numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero]].
(sourceStream peekFor: $.)
ifTrue:
[^self readFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart].
integerPart
ifNil:
["No integerPart, raise an error"
^ self expected: 'a digit'].
numerator := neg
ifTrue: [integerPart negated]
ifFalse: [integerPart].
self readExponent ifTrue: [numerator := numerator * (base raisedToInteger: exponent)].
(sourceStream peekFor: $/) ifFalse: [^numerator].
base := 10.
(denominator := self nextUnsignedIntegerOrNilBase: base)
ifNil:
[sourceStream skip: -1. "Not a valid denominator, ungobble / and return numerator"
^numerator].
(sourceStream peekFor: $r)
ifTrue: ["<base>r<integer>"
(base := denominator) < 2
ifTrue: [
sourceStream skip: -1.
^ self expected: 'an integer greater than 1 as valid radix'].
denominator := self nextUnsignedIntegerBase: base].
self readExponent ifTrue: [denominator := denominator * (base raisedToInteger: exponent)].
^numerator / denominator
]

{ #category : #'parsing-public' }
ExtendedNumberParser >> nextNumber [
"main method for reading a number.
This one can read Float Integer and ScaledDecimal"

| numberOfTrailingZeroInIntegerPart |
base := 10.
neg := self peekSignIsMinus.
integerPart := self nextUnsignedIntegerOrNilBase: base.
integerPart ifNil: [(sourceStream peekFor: $.)
ifTrue: [
"Try .1 syntax"
^self readNumberWithoutIntegerPart]
ifFalse: [
"This is not a regular number beginning with a digit
It is time to check for exceptional condition NaN and Infinity"
^self readNamedFloatOrFail]].
numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero.
(sourceStream peekFor: $r)
ifTrue: ["<base>r<integer>"
| oldNeg pos |
pos := sourceStream position.
(base := integerPart) < 2
ifTrue: ["A radix currently need to be greater than 1, ungobble the r and return the integer part"
sourceStream skip: -1.
^neg
ifTrue: [base negated]
ifFalse: [base]].
oldNeg := neg.
self peekSignIsMinus ifTrue: [neg := neg not].
integerPart := self nextUnsignedIntegerOrNilBase: base.
integerPart ifNil: [
(sourceStream peekFor: $.) ifTrue: [self readNumberWithoutIntegerPartOrNil ifNotNil: [:aNumber | ^aNumber]].
sourceStream position: pos.
^oldNeg
ifTrue: [base negated]
ifFalse: [base]].
numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero].
^ (sourceStream peekFor: $.)
ifTrue: [self readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart]
ifFalse: [self makeIntegerOrScaledInteger]
]

{ #category : #'parsing-private' }
ExtendedNumberParser >> readFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart [
"at this stage, sign integerPart and a fraction point have been read.
try and form a number with a fractionPart"

| numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value |
fractionPart := self nextUnsignedIntegerOrNilBase: base.
fractionPart
ifNil: [
"No fractionPart found, but can be an extended 1.e2 syntax"
integerPart ifNil: ["No integerPart, nor fractionPart found, ungobble the fraction point and raise an error"
sourceStream skip: -1.
^self expected: 'a digit'].
fractionPart := 0.
numberOfNonZeroFractionDigits := 0.
numberOfTrailingZeroInFractionPart := 0]
ifNotNil: [.
numberOfNonZeroFractionDigits := lastNonZero.
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero].
self readExponent.
integerPart ifNil: [integerPart := 0].

fractionPart isZero
ifTrue: [mantissa := integerPart
// (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
exponent := exponent + numberOfTrailingZeroInIntegerPart]
ifFalse: [mantissa := integerPart
* (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
exponent := exponent - numberOfNonZeroFractionDigits].

value := exponent positive
ifTrue: [mantissa * (base raisedToInteger: exponent)]
ifFalse: [mantissa / (base raisedToInteger: exponent negated)].
^ neg
ifTrue: [value negated]
ifFalse: [value]
]

{ #category : #'parsing-private' }
ExtendedNumberParser >> readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart [
"at this stage, sign integerPart and a decimal point have been read.
try and form a number with a fractionPart"

| numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value |
fractionPart := self nextUnsignedIntegerOrNilBase: base.
fractionPart
ifNil: [
"No fractionPart found, but can be a 1.e2 syntax"
fractionPart := 0.
numberOfNonZeroFractionDigits := 0.
numberOfTrailingZeroInFractionPart := 0]
ifNotNil: [.
numberOfNonZeroFractionDigits := lastNonZero.
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero].
self readExponent
ifFalse: [self readScale
ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits
andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]].

fractionPart isZero
ifTrue: [mantissa := integerPart
// (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
exponent := exponent + numberOfTrailingZeroInIntegerPart]
ifFalse: [mantissa := integerPart
* (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
exponent := exponent - numberOfNonZeroFractionDigits].

value := self makeFloatFromMantissa: mantissa exponent: exponent base: base.
^ neg
ifTrue: [value isZero
ifTrue: [Float negativeZero]
ifFalse: [value negated]]
ifFalse: [value]
]

{ #category : #'parsing-private' }
ExtendedNumberParser >> readNumberWithoutIntegerPart [
"at this stage, sign followed by a decimal point have been read, but no intergerPart
try and form a number with a fractionPart"

^self readNumberWithoutIntegerPartOrNil ifNil: [
"No integer part, no fractionPart, this does not look like a number..."
^self expected: 'a digit between 0 and 9'].
]

{ #category : #'parsing-private' }
ExtendedNumberParser >> readNumberWithoutIntegerPartOrNil [
"at this stage, sign followed by a decimal point have been read, but no intergerPart
try and form a number with a fractionPart"

| numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value |
integerPart := 0.
fractionPart := self nextUnsignedIntegerOrNilBase: base.
fractionPart ifNil: [
"No integer part, no fractionPart, this does not look like a number..."
^nil].
numberOfNonZeroFractionDigits := lastNonZero.
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero.
self readExponent
ifFalse: [self readScale
ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits
andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]].

fractionPart isZero
ifTrue: [mantissa := 0]
ifFalse: [mantissa := (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
exponent := exponent - numberOfNonZeroFractionDigits].

value := self makeFloatFromMantissa: mantissa exponent: exponent base: base.
^ neg
ifTrue: [value isZero
ifTrue: [Float negativeZero]
ifFalse: [value negated]]
ifFalse: [value]
]
1 change: 1 addition & 0 deletions src/ExtendedNumberParser/package.st
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Package { #name : #ExtendedNumberParser }
Loading