From 31d970d15c5ce63b043908c0f62d3e92d40c5f88 Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 00:46:31 +0200 Subject: [PATCH 1/8] rename fare structure first_leg to alight_leg and second_leg to board_leg --- .../org/ipea/r5r/Fares/FarePerTransfer.java | 50 ++++++++--------- .../ipea/r5r/Fares/FareStructureBuilder.java | 4 +- .../RuleBasedInRoutingFareCalculator.java | 53 +++++++++--------- r-package/R/fare_structure.R | 12 ++-- r-package/inst/jar/r5r.jar | Bin 134785 -> 137745 bytes r-package/vignettes/fare_structure.Rmd | 12 ++-- 6 files changed, 65 insertions(+), 66 deletions(-) diff --git a/java-r5rcore/src/org/ipea/r5r/Fares/FarePerTransfer.java b/java-r5rcore/src/org/ipea/r5r/Fares/FarePerTransfer.java index 74f8b991..3a0d8de7 100644 --- a/java-r5rcore/src/org/ipea/r5r/Fares/FarePerTransfer.java +++ b/java-r5rcore/src/org/ipea/r5r/Fares/FarePerTransfer.java @@ -3,36 +3,36 @@ import com.fasterxml.jackson.annotation.JsonIgnore; public class FarePerTransfer { - private String firstLeg; - private String secondLeg; + private String alightLeg; + private String boardLeg; private float fare; @JsonIgnore private int integerFare; - public int getFirstLegFullIntegerFare() { - return firstLegFullIntegerFare; + public int getAlightLegFullIntegerFare() { + return alightLegFullIntegerFare; } - public void setFirstLegFullIntegerFare(int firstLegFullIntegerFare) { - this.firstLegFullIntegerFare = firstLegFullIntegerFare; + public void setAlightLegFullIntegerFare(int alightLegFullIntegerFare) { + this.alightLegFullIntegerFare = alightLegFullIntegerFare; } - public int getSecondLegFullIntegerFare() { - return secondLegFullIntegerFare; + public int getBoardLegFullIntegerFare() { + return boardLegFullIntegerFare; } - public void setSecondLegFullIntegerFare(int secondLegFullIntegerFare) { - this.secondLegFullIntegerFare = secondLegFullIntegerFare; + public void setBoardLegFullIntegerFare(int boardLegFullIntegerFare) { + this.boardLegFullIntegerFare = boardLegFullIntegerFare; } @JsonIgnore - private int firstLegFullIntegerFare; + private int alightLegFullIntegerFare; @JsonIgnore - private int secondLegFullIntegerFare; + private int boardLegFullIntegerFare; - public FarePerTransfer(String firstLeg, String secondLeg, float fare) { - this.firstLeg = firstLeg; - this.secondLeg = secondLeg; + public FarePerTransfer(String alightLeg, String boardLeg, float fare) { + this.alightLeg = alightLeg; + this.boardLeg = boardLeg; this.fare = fare; this.integerFare = Math.round(fare * 100.0f); } @@ -41,20 +41,20 @@ public FarePerTransfer() { this("BUS", "BUS", 0.0f); } - public String getFirstLeg() { - return firstLeg; + public String getAlightLeg() { + return alightLeg; } - public void setFirstLeg(String firstLeg) { - this.firstLeg = firstLeg; + public void setAlightLeg(String alightLeg) { + this.alightLeg = alightLeg; } - public String getSecondLeg() { - return secondLeg; + public String getBoardLeg() { + return boardLeg; } - public void setSecondLeg(String secondLeg) { - this.secondLeg = secondLeg; + public void setBoardLeg(String boardLeg) { + this.boardLeg = boardLeg; } public float getFare() { @@ -73,8 +73,8 @@ public void setFare(float fare) { @Override public String toString() { return "FarePerTransfer{" + - "firstLeg='" + firstLeg + '\'' + - ", secondLeg='" + secondLeg + '\'' + + "alightLeg='" + alightLeg + '\'' + + ", boardLeg='" + boardLeg + '\'' + ", fare=" + fare + '}'; } diff --git a/java-r5rcore/src/org/ipea/r5r/Fares/FareStructureBuilder.java b/java-r5rcore/src/org/ipea/r5r/Fares/FareStructureBuilder.java index 5db126f1..84d5ff1b 100644 --- a/java-r5rcore/src/org/ipea/r5r/Fares/FareStructureBuilder.java +++ b/java-r5rcore/src/org/ipea/r5r/Fares/FareStructureBuilder.java @@ -90,8 +90,8 @@ private void populateFareStructure(String type, float fare) { String[] legs = transfer.split("&"); FarePerTransfer newTransfer = new FarePerTransfer(); - newTransfer.setFirstLeg(legs[0]); - newTransfer.setSecondLeg(legs[1]); + newTransfer.setAlightLeg(legs[0]); + newTransfer.setBoardLeg(legs[1]); newTransfer.setFare(fare); faresPerTransfer.add(newTransfer); diff --git a/java-r5rcore/src/org/ipea/r5r/Fares/RuleBasedInRoutingFareCalculator.java b/java-r5rcore/src/org/ipea/r5r/Fares/RuleBasedInRoutingFareCalculator.java index d4b49f7d..f2d047d5 100644 --- a/java-r5rcore/src/org/ipea/r5r/Fares/RuleBasedInRoutingFareCalculator.java +++ b/java-r5rcore/src/org/ipea/r5r/Fares/RuleBasedInRoutingFareCalculator.java @@ -2,7 +2,6 @@ import com.conveyal.r5.analyst.fare.FareBounds; import com.conveyal.r5.analyst.fare.InRoutingFareCalculator; -import com.conveyal.r5.analyst.fare.TransferAllowance; import com.conveyal.r5.profile.McRaptorSuboptimalPathProfileRouter; import com.conveyal.r5.transit.RouteInfo; import com.conveyal.r5.transit.TransitLayer; @@ -65,11 +64,11 @@ private void loadFareInformation() { this.faresPerTransfer = new FarePerTransfer[nTypes][nTypes]; for (FarePerTransfer transfer : fareStructure.getFaresPerTransfer()) { - int firstTypeIndex = indexTransportType.get(transfer.getFirstLeg()); - int secondTypeIndex = indexTransportType.get(transfer.getSecondLeg()); + int firstTypeIndex = indexTransportType.get(transfer.getAlightLeg()); + int secondTypeIndex = indexTransportType.get(transfer.getBoardLeg()); - transfer.setFirstLegFullIntegerFare(fareStructure.getFaresPerType().get(firstTypeIndex).getIntegerFare()); - transfer.setSecondLegFullIntegerFare(fareStructure.getFaresPerType().get(secondTypeIndex).getIntegerFare()); + transfer.setAlightLegFullIntegerFare(fareStructure.getFaresPerType().get(firstTypeIndex).getIntegerFare()); + transfer.setBoardLegFullIntegerFare(fareStructure.getFaresPerType().get(secondTypeIndex).getIntegerFare()); faresPerTransfer[firstTypeIndex][secondTypeIndex] = transfer; } @@ -129,13 +128,13 @@ public FareBounds calculateFare(McRaptorSuboptimalPathProfileRouter.McRaptorStat currentBoardTime = boardTimes.get(ride); // get info on each leg - FarePerRoute firstLegType = faresPerRoute[previousPatternIndex]; - FarePerRoute secondLegType = faresPerRoute[currentPatternIndex]; - lastFareType = secondLegType.getTypeIndex(); + FarePerRoute alightLegType = faresPerRoute[previousPatternIndex]; + FarePerRoute boardLegType = faresPerRoute[currentPatternIndex]; + lastFareType = boardLegType.getTypeIndex(); // check if transfer is in same type with unlimited transfers - if (firstLegType.getTypeIndex() == secondLegType.getTypeIndex()) { - FarePerType typeData = getTypeByIndex(firstLegType.getTypeIndex()); + if (alightLegType.getTypeIndex() == boardLegType.getTypeIndex()) { + FarePerType typeData = getTypeByIndex(alightLegType.getTypeIndex()); // unlimited transfers mean the fare is $ 0.00, and transfer allowance is not spent if (typeData.isUnlimitedTransfers()) { @@ -195,7 +194,7 @@ public FareBounds calculateFare(McRaptorSuboptimalPathProfileRouter.McRaptorStat int maxAllowanceValue = 0; for (FarePerTransfer transfer : faresPerTransfer[faresPerRoute[currentPatternIndex].getTypeIndex()]) { if (transfer != null) { - int fullTransferFare = transfer.getFirstLegFullIntegerFare() + transfer.getSecondLegFullIntegerFare(); + int fullTransferFare = transfer.getAlightLegFullIntegerFare() + transfer.getBoardLegFullIntegerFare(); int allowance = fullTransferFare - transfer.getIntegerFare(); maxAllowanceValue = Math.max(allowance, maxAllowanceValue); @@ -223,47 +222,47 @@ private int getFullFareForRoute(int patternIndex) { } private IntegratedFare getIntegrationFare(int firstPattern, int secondPattern, int transferTime) { - FarePerRoute firstLeg = faresPerRoute[firstPattern]; - FarePerRoute secondLeg = faresPerRoute[secondPattern]; + FarePerRoute alightLeg = faresPerRoute[firstPattern]; + FarePerRoute boardLeg = faresPerRoute[secondPattern]; - FarePerTransfer transferFare = getTransferByIndex(firstLeg.getTypeIndex(), secondLeg.getTypeIndex()); + FarePerTransfer transferFare = getTransferByIndex(alightLeg.getTypeIndex(), boardLeg.getTypeIndex()); if (transferFare == null) { // there is no record in transfers table, return full fare of second route - int fareSecondLeg = getFullFareForRoute(secondPattern); - return new IntegratedFare(fareSecondLeg, false); + int fareboardLeg = getFullFareForRoute(secondPattern); + return new IntegratedFare(fareboardLeg, false); } // discounted transfer found // check if transfer is allowed (transfer between same route ids) - if (!isTransferAllowed(firstLeg, secondLeg)) { + if (!isTransferAllowed(alightLeg, boardLeg)) { // transfer is not allowed, so return full fare for second leg - int fareSecondLeg = getFullFareForRoute(secondPattern); - return new IntegratedFare(fareSecondLeg, false); + int fareboardLeg = getFullFareForRoute(secondPattern); + return new IntegratedFare(fareboardLeg, false); } // transfer is allowed // check if transfer time is within limits if (transferTime > this.fareStructure.getTransferTimeAllowanceSeconds()) { // transfer time expired, return full fare for second leg - int fareSecondLeg = getFullFareForRoute(secondPattern); - return new IntegratedFare(fareSecondLeg, false); + int fareboardLeg = getFullFareForRoute(secondPattern); + return new IntegratedFare(fareboardLeg, false); } // all restrictions clear: transfer is allowed // discount the fare already considered in first leg - int fareFirstLeg = getFullFareForRoute(firstPattern); - return new IntegratedFare(transferFare.getIntegerFare() - fareFirstLeg, true); + int farealightLeg = getFullFareForRoute(firstPattern); + return new IntegratedFare(transferFare.getIntegerFare() - farealightLeg, true); } - private boolean isTransferAllowed(FarePerRoute firstLeg, FarePerRoute secondLeg) { + private boolean isTransferAllowed(FarePerRoute alightLeg, FarePerRoute boardLeg) { // if transfer is between routes in the same type, the condition 'allow-same-route-transfer' also applies - if (firstLeg.getTypeIndex() == secondLeg.getTypeIndex()) { + if (alightLeg.getTypeIndex() == boardLeg.getTypeIndex()) { // if type allows transfers between same route, return true - FarePerType typeData = getTypeByIndex(firstLeg.getTypeIndex()); + FarePerType typeData = getTypeByIndex(alightLeg.getTypeIndex()); if (typeData.isAllowSameRouteTransfer()) return true; // if transfers between same route are not allowed, then check if route ids are different - return !firstLeg.getRouteId().equals(secondLeg.getRouteId()); + return !alightLeg.getRouteId().equals(boardLeg.getRouteId()); } else { // transfer is between routes in different types, so transfer is allowed return true; diff --git a/r-package/R/fare_structure.R b/r-package/R/fare_structure.R index 72f09e15..f5110cfd 100644 --- a/r-package/R/fare_structure.R +++ b/r-package/R/fare_structure.R @@ -299,8 +299,8 @@ read_fare_structure <- function(file_path, encoding = "UTF-8") { fare_structure$fares_per_transfer <- data.table::fread( file = tmpfile("fares_per_transfer.csv"), select = c( - first_leg = "character", - second_leg = "character", + alight_leg = "character", + board_leg = "character", fare = "numeric" ), encoding = encoding @@ -403,19 +403,19 @@ assert_fare_structure <- function(fare_structure) { checkmate::expect_data_frame(fare_structure$fares_per_transfer) if (length(names(fare_structure$fares_per_transfer)) > 0) { checkmate::expect_character( - fare_structure$fares_per_transfer$first_leg, + fare_structure$fares_per_transfer$alight_leg, any.missing = FALSE ) checkmate::assert_names( - fare_structure$fares_per_transfer$first_leg, + fare_structure$fares_per_transfer$alight_leg, subset.of = unique(fare_structure$fares_per_type$type) ) checkmate::expect_character( - fare_structure$fares_per_transfer$second_leg, + fare_structure$fares_per_transfer$board_leg, any.missing = FALSE ) checkmate::assert_names( - fare_structure$fares_per_transfer$second_leg, + fare_structure$fares_per_transfer$board_leg, subset.of = unique(fare_structure$fares_per_type$type) ) checkmate::expect_numeric( diff --git a/r-package/inst/jar/r5r.jar b/r-package/inst/jar/r5r.jar index 1d327d22b2d9b5dc2740a480cf3c8203abb45ad8..4466f368f9d967698c4f6647f36bcf5b8180d4a5 100644 GIT binary patch delta 13151 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 MP*8XXkS^%|07uTK{{R30 delta 10453 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 NTOq&S!Uh)b{{XC7Qr`do diff --git a/r-package/vignettes/fare_structure.Rmd b/r-package/vignettes/fare_structure.Rmd index afe4ca22..f8841036 100644 --- a/r-package/vignettes/fare_structure.Rmd +++ b/r-package/vignettes/fare_structure.Rmd @@ -235,7 +235,7 @@ fare_structure$fares_per_type The fare rules for transfer are stored in the `fares_per_transfer` data.frame, which is shown below. Each row contains the fare prices for transfers between the -modes specified in `first_leg` and `second_leg` columns. +modes specified in `alight_leg` and `board_leg` columns. ```{r} fare_structure$fares_per_transfer @@ -248,18 +248,18 @@ Porto Alegre. ```{r} # conditional update fare value -fare_structure$fares_per_transfer[first_leg == "BUS" & second_leg == "BUS", fare := 7.2] +fare_structure$fares_per_transfer[alight_leg == "BUS" & board_leg == "BUS", fare := 7.2] ``` - Transfers between "BUS" and "RAIL" (in any direction) cost 8.37, once the 10% discount is applied. Let's make a final update in the data.frame to account for that. ```{r} # conditional update fare value -fare_structure$fares_per_transfer[first_leg != second_leg, fare := 8.37] +fare_structure$fares_per_transfer[alight_leg != board_leg, fare := 8.37] # use fcase instead ? -fare_structure$fares_per_transfer[, fare := fcase(first_leg == "BUS" & second_leg == "BUS", 7.2, - first_leg != second_leg, 8.37)] +fare_structure$fares_per_transfer[, fare := fcase(alight_leg == "BUS" & board_leg == "BUS", 7.2, + alight_leg != board_leg, 8.37)] ``` @@ -271,7 +271,7 @@ will count to the global `max_discounted_transfers` allowance. ```{r} # remove row -fare_structure$fares_per_transfer <- fare_structure$fares_per_transfer[!(first_leg == "RAIL" & second_leg == "RAIL")] +fare_structure$fares_per_transfer <- fare_structure$fares_per_transfer[!(alight_leg == "RAIL" & board_leg == "RAIL")] ``` From bf730a84c71033bcc975538bac0d76d47d805591 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 22:55:23 +0000 Subject: [PATCH 2/8] Rebuild JAR for commit 31d970d15c5ce63b043908c0f62d3e92d40c5f88 --- r-package/inst/jar/r5r.jar | Bin 137745 -> 134788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/r-package/inst/jar/r5r.jar b/r-package/inst/jar/r5r.jar index 4466f368f9d967698c4f6647f36bcf5b8180d4a5..029c1b8294596dd3b99df9e7c520aedc14258f1a 100644 GIT binary patch delta 2772 zcmai0dsLH07N40A$vc505JZxQ6{HbFK}u6sKs<;gNz|4V{Y!_cYiZ; z@61=eN3ym;qD)N^dFT+5NYIVi?s8?2h@YZf6?L#_%}|)W2!g5UMSiM1jw1%a|38d0 z%a07AhAUXXEB4;IhC8(&U3-B4B?l?^3T`AIMV-P6K*yzgYvgX(Bx(`*GdYWQa@KL) zDkfxl^x)KJPlR?VxzDVD&PTQsPaeXVHua{77Z`$x?o<&^ZhirzcD_+2_6C=%$}T+! zMFkfOF5fYr2)HW;a?Z8i1^^G|<)5c`@TR>V4#T58AoE`m@-N+xBGjg%r-QLSEz=OA z^ZKDXQh><4zC#HC7Ac-H7^M1OEP_1Fii?ec*Vt2Y)nHp)izfo{@;|~MJ{-RUTj#u_ z-zfNAHTS{pIM2!}fs3F=&c3bHyOg$bW-|%Z-W#MRk-@#0z_i zSL3K)kgA$-3gn}|IM=f9*)i>TY|#x_@1V zf9r<2>(!$k*;oC%ZPV`j$RWi&S0nEx-(9nL{)s~ssxAF*PCMw;ykVT7G{1eqgWt}t z5Tzzzq7w~tFl~|$e;O+xetaX-=@JsdpELbTLPmkW?2#aNN=dYdnKDn`PTtWcM(8j* z!vJ=SkB7s4i>i)eGp$w==ra0&f%uDpJP}RvBf8KhGxIooMe1QYvBy$mGO%xC2-#AVhGxM@&VTyLP5gN&LyyNz7n@?Sh<|ec#`&G9mPFJVK-0Aj~N=PDNt=4>PYNTw1}i z%zX0_M;>F$qAdsoy1^zu0Jo}4Nnh3x1;95p?w5bfR_qgn5L?Q?aM+XWJUpdp5&)ih z_4Mk`4a{>KLX7pmaM;IF-jk~+kUg_ayw~&h)wq-1_96z_sU~v3|6ACKBS*av%3$@u zs1FQ>{dI8lqYJ!=8EW%^nr&zHVY+n~_N8GOG6J;UYnax4QqbPikO0tL^k&*~XLxNq z9j|pANCxjKJ1_XMTl__!aCnNLG+T+#MpozUCz8<0vlV)!lt;XKQ;0pp{y?7Bv`m;G z#kAau_|VQ^Y^0Se8x&#I%(}`F_H1Zb`9};aj4zg)p%4%Y5GpSQ5n&M^xWAqXq}w$v z1o7DQpNiR&H-oWrZ=NkyOgGfx;WWwj$u?|@!*r|kIc;eBVOPaH*3NPbLc`s-=qEtP z7@*vG=Iy06Mp@1%hq}3?B!ZiPtJFw2jgL^}5R(!S^1hRuc8AB)G1t-rHk@?mV0!X# zSB#Xg^qZY};8=#x2scvJg#rpy%Lu$f zG?a(fmgj=VlDkT0HJ?+L4{Cl1YWfM=H=tkMRTfmi-YXCGUirJBuUv-dY=x`L$`lM? zN)hH(MGbl8lB+yxk}hEJlO+g^a>FPSBB(}5%#iL*`}|{=)p|`1LWA90P1i(swFJIy=R^Y@^wwFfbhUuKGXW#q^erz?Ti}mZhvAH+XuP4BF4E>nhLO?UXhe4nwOjUER1^NcmbxciG{!W{H lh$a4cpA?VDIqZ}A@RJ`HsY&8NyzwRWqwF#~|BxLl`X7>kxCa0L delta 5636 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 From 4aa22f30a3e9530d0ba4c99649f40591120501f2 Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 13:44:02 +0200 Subject: [PATCH 3/8] fix test to look for new names --- .../inst/extdata/poa/fares/fares_poa.zip | Bin 3741 -> 3727 bytes .../testthat/test-assert_fare_structure.R | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/r-package/inst/extdata/poa/fares/fares_poa.zip b/r-package/inst/extdata/poa/fares/fares_poa.zip index ef259fb0136d29dbe442271ec830e8bab5c68782..a12b136303798cd63da7316dc162ae9990b251e5 100644 GIT binary patch delta 203 zcmbO$+b_G}H@hGM0|$dq?uV#$Gu!pX3=9lzlX*Do49}eOIj_-q-qZKG=P7?3FUHN6 zgt~(&cg}HYE_JvObG~D`_KAy^+0SggU~JZYqOnyWX0k1(_~r#1`pk?BlP_?`14#p( z1XTtRpowVa14YCb6o4cH10$H8yp_iusQxRD3S-S=DPAieJCs+2(O_~FuPcy!fLDcC gfs0|XH~t`96%`2S{MRX2~;h{pa3KxU`gZTU4iUP lyeiCkTnv+KxlGssycwB9m?sPKsW9H0Y{3`Ec8VKh3ILhWIYIyc diff --git a/r-package/tests/testthat/test-assert_fare_structure.R b/r-package/tests/testthat/test-assert_fare_structure.R index 97195059..85adae20 100644 --- a/r-package/tests/testthat/test-assert_fare_structure.R +++ b/r-package/tests/testthat/test-assert_fare_structure.R @@ -151,21 +151,21 @@ test_that("fares_per_transfer is right", { expect_true(assert_fare_structure(struc_copy)) struc_copy <- copied_element("fares_per_transfer") - struc_copy$fares_per_transfer[, first_leg := as.factor(first_leg)] + struc_copy$fares_per_transfer[, alight_leg := as.factor(alight_leg)] expect_error(assert_fare_structure(struc_copy)) struc_copy <- copied_element("fares_per_transfer") - struc_copy$fares_per_transfer[1, first_leg := NA] + struc_copy$fares_per_transfer[1, alight_leg := NA] expect_error(assert_fare_structure(struc_copy)) - struc_copy$fares_per_transfer[1, first_leg := "oie"] + struc_copy$fares_per_transfer[1, alight_leg := "oie"] expect_error(assert_fare_structure(struc_copy)) struc_copy <- copied_element("fares_per_transfer") - struc_copy$fares_per_transfer[, second_leg := as.factor(second_leg)] + struc_copy$fares_per_transfer[, board_leg := as.factor(board_leg)] expect_error(assert_fare_structure(struc_copy)) struc_copy <- copied_element("fares_per_transfer") - struc_copy$fares_per_transfer[1, second_leg := NA] + struc_copy$fares_per_transfer[1, board_leg := NA] expect_error(assert_fare_structure(struc_copy)) - struc_copy$fares_per_transfer[1, second_leg := "oie"] + struc_copy$fares_per_transfer[1, board_leg := "oie"] expect_error(assert_fare_structure(struc_copy)) struc_copy <- copied_element("fares_per_transfer") From d6078415e260bcb6f0b21d29de21a9a622ee4099 Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 14:36:09 +0200 Subject: [PATCH 4/8] updated name in vignette --- r-package/vignettes/pareto_frontier.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r-package/vignettes/pareto_frontier.Rmd b/r-package/vignettes/pareto_frontier.Rmd index c74c75dd..98f65511 100644 --- a/r-package/vignettes/pareto_frontier.Rmd +++ b/r-package/vignettes/pareto_frontier.Rmd @@ -143,8 +143,8 @@ fare_structure$fares_per_type[, fare := fcase(type == "BUS", 4.80, type == "RAIL", 4.50)] # update the cost of tranfers -fare_structure$fares_per_transfer[, fare := fcase(first_leg == "BUS" & second_leg == "BUS", 7.2, - first_leg != second_leg, 8.37)] +fare_structure$fares_per_transfer[, fare := fcase(alight_leg == "BUS" & board_leg == "BUS", 7.2, + alight_leg != board_leg, 8.37)] # update transfer_time_allowance to 60 minutes fare_structure$transfer_time_allowance <- 60 From c34185c248fed2fbf42a23f3179499db71262b69 Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 14:41:06 +0200 Subject: [PATCH 5/8] rebuild_jar --- r-package/inst/jar/r5r.jar | Bin 134827 -> 137787 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/r-package/inst/jar/r5r.jar b/r-package/inst/jar/r5r.jar index 1ef3cc41d008d25b34d37e2c7468b2ab76fd6564..b4c63cef4cadf166e2e3408ea4e16acb5bfbbe01 100644 GIT binary patch delta 13456 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 H9M}FIzF4-8 delta 10412 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 VM@SDwLD&xz7XY}sg$+=^{{aTrfJ6WQ From 2922f3d383202c6cb0d21f7f86d48d0b2bd2d49d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:44:49 +0000 Subject: [PATCH 6/8] Rebuild JAR for commit c34185c248fed2fbf42a23f3179499db71262b69 --- r-package/inst/jar/r5r.jar | Bin 137787 -> 134830 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/r-package/inst/jar/r5r.jar b/r-package/inst/jar/r5r.jar index b4c63cef4cadf166e2e3408ea4e16acb5bfbbe01..dcfa34aed7cc78e7a00d4a3bd4dc17ccdb6cad34 100644 GIT binary patch delta 2705 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 From 6d947f4c895c1aee6134124863c0f0d7f9b0cebd Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 19:08:48 +0200 Subject: [PATCH 7/8] rename fare structure in test --- .../testthat/test-setup_fare_structure.R | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/r-package/tests/testthat/test-setup_fare_structure.R b/r-package/tests/testthat/test-setup_fare_structure.R index 36f4e05e..7320823f 100644 --- a/r-package/tests/testthat/test-setup_fare_structure.R +++ b/r-package/tests/testthat/test-setup_fare_structure.R @@ -85,8 +85,8 @@ test_that("outputs a list with correct elements", { expect_type(struc$fares_per_type$fare, "double") expect_s3_class(struc$fares_per_transfer, "data.table") - expect_type(struc$fares_per_transfer$first_leg, "character") - expect_type(struc$fares_per_transfer$second_leg, "character") + expect_type(struc$fares_per_transfer$alight_leg, "character") + expect_type(struc$fares_per_transfer$board_leg, "character") expect_type(struc$fares_per_transfer$fare, "double") expect_s3_class(struc$fares_per_route, "data.table") @@ -113,32 +113,32 @@ test_that("uses the parameter 'by' to fill the structure", { struc <- tester(by = "AGENCY_ID") expect_true(all(gtfs$agency$agency_id %in% struc$fares_per_type$type)) expect_true( - all(gtfs$agency$agency_id %in% struc$fares_per_transfer$first_leg) + all(gtfs$agency$agency_id %in% struc$fares_per_transfer$alight_leg) ) expect_true( - all(gtfs$agency$agency_id %in% struc$fares_per_transfer$second_leg) + all(gtfs$agency$agency_id %in% struc$fares_per_transfer$board_leg) ) struc <- tester(by = "AGENCY_NAME") expect_true(all(gtfs$agency$agency_name %in% struc$fares_per_type$type)) expect_true( - all(gtfs$agency$agency_name %in% struc$fares_per_transfer$first_leg) + all(gtfs$agency$agency_name %in% struc$fares_per_transfer$alight_leg) ) expect_true( - all(gtfs$agency$agency_name %in% struc$fares_per_transfer$second_leg) + all(gtfs$agency$agency_name %in% struc$fares_per_transfer$board_leg) ) gtfs_modes <- gtfs$routes$route_type gtfs_modes <- ifelse(gtfs_modes == 3, "BUS", "RAIL") struc <- tester(by = "MODE") expect_true(all(gtfs_modes %in% struc$fares_per_type$type)) - expect_true(all(gtfs_modes %in% struc$fares_per_transfer$first_leg)) - expect_true(all(gtfs_modes %in% struc$fares_per_transfer$second_leg)) + expect_true(all(gtfs_modes %in% struc$fares_per_transfer$alight_leg)) + expect_true(all(gtfs_modes %in% struc$fares_per_transfer$board_leg)) struc <- tester(by = "GENERIC") expect_true(struc$fares_per_type$type == "GENERIC") - expect_true(struc$fares_per_transfer$first_leg == "GENERIC") - expect_true(struc$fares_per_transfer$second_leg == "GENERIC") + expect_true(struc$fares_per_transfer$alight_leg == "GENERIC") + expect_true(struc$fares_per_transfer$board_leg == "GENERIC") }) test_that("debug info is correctly set", { From 4914b2090914da0d33102641c8fc53c75fc32893 Mon Sep 17 00:00:00 2001 From: Alex Magnus Date: Wed, 16 Jul 2025 19:46:34 +0200 Subject: [PATCH 8/8] rename fare structure in test --- r-package/tests/testthat/test-read_fare_structure.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r-package/tests/testthat/test-read_fare_structure.R b/r-package/tests/testthat/test-read_fare_structure.R index d5523415..6210f4c7 100644 --- a/r-package/tests/testthat/test-read_fare_structure.R +++ b/r-package/tests/testthat/test-read_fare_structure.R @@ -46,8 +46,8 @@ test_that("outputs a list with correct elements", { expect_type(struc$fares_per_type$fare, "double") expect_s3_class(struc$fares_per_transfer, "data.table") - expect_type(struc$fares_per_transfer$first_leg, "character") - expect_type(struc$fares_per_transfer$second_leg, "character") + expect_type(struc$fares_per_transfer$alight_leg, "character") + expect_type(struc$fares_per_transfer$board_leg, "character") expect_type(struc$fares_per_transfer$fare, "double") expect_s3_class(struc$fares_per_route, "data.table")