Initial work on time domain
This commit is contained in:
		
							parent
							
								
									2b0e00ea3b
								
							
						
					
					
						commit
						5970f46c06
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -11,3 +11,5 @@ lib/* | |||
| build | ||||
| yarn-error.log | ||||
| *.bs.js | ||||
| # Local Netlify folder | ||||
| .netlify | ||||
|  | @ -19,8 +19,6 @@ let _lastElement = (a: array('a)) => | |||
| 
 | ||||
| let probabilityBeforeDomainMax = (t: t) => _lastElement(t.distribution.ys); | ||||
| 
 | ||||
| let chanceByX = (t: t) => t.distribution; | ||||
| 
 | ||||
| let domainMaxX = (t: t) => t.domainMaxX; | ||||
| 
 | ||||
| let probabilityDistribution = (t: t) => | ||||
|  | @ -29,5 +27,11 @@ let probabilityDistribution = (t: t) => | |||
| let probability = (t: t, xPoint: float) => | ||||
|   CdfLibrary.Distribution.findY(xPoint, probabilityDistribution(t)); | ||||
| 
 | ||||
| let probabilityInverse = (t: t, yPoint: float) => | ||||
|   CdfLibrary.Distribution.findX(yPoint, probabilityDistribution(t)); | ||||
| 
 | ||||
| let cumulativeProbability = (t: t, xPoint: float) => | ||||
|   CdfLibrary.Distribution.findY(xPoint, t.distribution); | ||||
| 
 | ||||
| let cumulativeProbabilityInverse = (t: t, yPoint: float) => | ||||
|   CdfLibrary.Distribution.findX(yPoint, t.distribution); | ||||
							
								
								
									
										74
									
								
								src/TimeLimitedDomainCdf.re
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/TimeLimitedDomainCdf.re
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| type timeUnit = [ | ||||
|   | `days | ||||
|   | `hours | ||||
|   | `milliseconds | ||||
|   | `minutes | ||||
|   | `months | ||||
|   | `quarters | ||||
|   | `seconds | ||||
|   | `weeks | ||||
|   | `years | ||||
| ]; | ||||
| 
 | ||||
| type t = { | ||||
|   timeUnit, | ||||
|   timeStart: MomentRe.Moment.t, | ||||
|   limitedDomainCdf: LimitedDomainCdf.t, | ||||
| }; | ||||
| 
 | ||||
| module XSpecification = { | ||||
|   type xSpecification = | ||||
|     | Time(MomentRe.Moment.t) | ||||
|     | DifferenceFromStart(float, timeUnit) | ||||
|     | CdfXCoordinate(float); | ||||
| 
 | ||||
|   let toTime = (t: t, xSpecification: xSpecification) => | ||||
|     switch (xSpecification) { | ||||
|     | Time(r) => r | ||||
|     | DifferenceFromStart(r, unit) => | ||||
|       t.timeStart | ||||
|       |> MomentRe.Moment.add(~duration=MomentRe.duration(r, unit)) | ||||
|     | CdfXCoordinate(r) => | ||||
|       t.timeStart | ||||
|       |> MomentRe.Moment.add(~duration=MomentRe.duration(r, t.timeUnit)) | ||||
|     }; | ||||
| 
 | ||||
|   let rec toCdfXCoordinate = (t: t, xSpecification: xSpecification) => | ||||
|     switch (xSpecification) { | ||||
|     | Time(r) => MomentRe.diff(t.timeStart, r, t.timeUnit) | ||||
|     | DifferenceFromStart(r, unit) => | ||||
|       let newTime = toTime(t, DifferenceFromStart(r, unit)); | ||||
|       toCdfXCoordinate(t, Time(newTime)); | ||||
|     | CdfXCoordinate(r) => r | ||||
|     }; | ||||
| 
 | ||||
|   let fromDifference = (~t: t, ~duration: float, ~unit=t.timeUnit, ()) => | ||||
|     Time( | ||||
|       MomentRe.Moment.add( | ||||
|         ~duration=MomentRe.duration(duration, unit), | ||||
|         t.timeStart, | ||||
|       ), | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| let probabilityBeforeDomainMax = (t: t) => | ||||
|   LimitedDomainCdf.probabilityBeforeDomainMax(t.limitedDomainCdf); | ||||
| 
 | ||||
| let domainMaxX = (t: t) => | ||||
|   LimitedDomainCdf.probabilityBeforeDomainMax(t.limitedDomainCdf); | ||||
| 
 | ||||
| let probability = (t: t, x: XSpecification.xSpecification) => | ||||
|   LimitedDomainCdf.probability( | ||||
|     t.limitedDomainCdf, | ||||
|     XSpecification.toCdfXCoordinate(t, x), | ||||
|   ); | ||||
| 
 | ||||
| let probabilityInverse = (t: t, y: float) => | ||||
|   XSpecification.CdfXCoordinate( | ||||
|     LimitedDomainCdf.probabilityInverse(t.limitedDomainCdf, y), | ||||
|   ); | ||||
| 
 | ||||
| let cumulativeProbabilityInverse = (t: t, y: float) => | ||||
|   XSpecification.CdfXCoordinate( | ||||
|     LimitedDomainCdf.cumulativeProbabilityInverse(t.limitedDomainCdf, y), | ||||
|   ); | ||||
|  | @ -1,9 +1,4 @@ | |||
| module Model = { | ||||
|   let foo = { | ||||
|     let bar = 2.0; | ||||
|     (); | ||||
|   }; | ||||
| 
 | ||||
|   let make = (dateTime: MomentRe.Moment.t, currentDateTime: MomentRe.Moment.t) => { | ||||
|     let yearDiff = MomentRe.diff(dateTime, currentDateTime, `days) /. 365.; | ||||
|     Prop.Value.Probability(0.001 *. yearDiff); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user