Guest User

Untitled

a guest
Mar 22nd, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. Quantity[5, "Days"] / Quantity[52, "Weeks"]
  2.  
  3. Quantity /:
  4. op : (Alternatives @@ (Symbol /@
  5. WolframLanguageData[
  6. EntityClass["WolframLanguageSymbol",
  7. {"FunctionalityArea", "MathOperationFunctions"}], "Name"]))[
  8. Quantity[v1_, u1_],
  9. Quantity[v2_, u2_]
  10. ] :=
  11. Quantity[op[v1, v2], op[u1, u2]]
  12.  
  13. Quantity[5, "Days"] / Quantity[52, "Weeks"]
  14.  
  15. Quantity[5/52, "Days"/"Weeks"]
  16.  
  17. (* Quantity[5/52, ("Days")/("Weeks")] *)
  18.  
  19. Quantity /:
  20. HoldPattern[Times][Longest[e2___], q_?QuantityQ, Shortest[e1, ___] /;
  21. QuantityUnits`$AutomaticUnitTimes === True := ...
  22.  
  23. (* Ensures the symbol exists from a fresh kernel for unprotecting it *)
  24. System`Quantity;
  25.  
  26. Unprotect[Quantity];
  27.  
  28. QuantityUnits`Private`iqTimes[QuantityUnits`Private`q_List] := Module[{units},
  29.  
  30. With[{vlist = QuantityUnits`Private`q[[All, 1]],
  31. ulist = QuantityUnits`Private`q[[All, 2]]},
  32.  
  33. units = Apply[Times, ulist];
  34. Quantity[Apply[Times, vlist], units]
  35. ]
  36. ];
  37.  
  38. Protect[Quantity];
  39.  
  40. Quantity[5, "Days"] / Quantity[52, "Weeks"]
  41.  
  42. (* Quantity[5/52, ("Days")/("Weeks")] *)
  43.  
  44. Quantity[2, "Weeks"] * %
  45.  
  46. (* Quantity[5/26, "Days"] *)
  47.  
  48. qtyUnitHoldRule=
  49. (op:Alternatives @@ (Symbol /@
  50. WolframLanguageData[
  51. EntityClass["WolframLanguageSymbol",
  52. {"FunctionalityArea", "MathOperationFunctions"}], "Name"])
  53. )[q1_?QuantityQ, q2_?QuantityQ ] ->
  54. Quantity[op @@ QuantityMagnitude[{q1, q2}], op @@ QuantityUnit[{q1, q2}]]
  55.  
  56. Remove[holdQuantityUnits];
  57. Attributes[holdQuantityUnits]={HoldAllComplete};
  58. holdQuantityUnits[code_] := Unevaluated[code] //. qtyUnitHoldRule
  59.  
  60. holdQuantityUnits[
  61. x=Quantity[5,"Days"];
  62. y=Quantity[52,"Weeks"];
  63. {Divide[x,y], x / y}
  64. ]
  65.  
  66. (* {Quantity[5/52, ("Days")/("Weeks")], 5 / 364} *)
Add Comment
Please, Sign In to add comment