Julia: unintended extension of base functions












1














I have the following, incomplete Julia code:



mutable struct Env
end

function step(env, action:UInt32)
return ones(8), 1.0, true, Dict()
end

function reset(env)
return ones(8)
end


When I try to use it, I get the following errors:




LoadError: error in method definition: function Base.step must be
explicitly imported to be extended
LoadError: error in method definition: function Base.reset must be
explicitly imported to be extended




I don't know what Base.step and Base.reset are, and I don't want to extend them.



Is there some way for me to keep these function names without extending the base functions? If I do just extend the base functions with my completely unrelated methods, are there going to be problems?



I really do not want to change the names of my functions because I want to keep them in line with the OpenAI Gym API.










share|improve this question



























    1














    I have the following, incomplete Julia code:



    mutable struct Env
    end

    function step(env, action:UInt32)
    return ones(8), 1.0, true, Dict()
    end

    function reset(env)
    return ones(8)
    end


    When I try to use it, I get the following errors:




    LoadError: error in method definition: function Base.step must be
    explicitly imported to be extended
    LoadError: error in method definition: function Base.reset must be
    explicitly imported to be extended




    I don't know what Base.step and Base.reset are, and I don't want to extend them.



    Is there some way for me to keep these function names without extending the base functions? If I do just extend the base functions with my completely unrelated methods, are there going to be problems?



    I really do not want to change the names of my functions because I want to keep them in line with the OpenAI Gym API.










    share|improve this question

























      1












      1








      1







      I have the following, incomplete Julia code:



      mutable struct Env
      end

      function step(env, action:UInt32)
      return ones(8), 1.0, true, Dict()
      end

      function reset(env)
      return ones(8)
      end


      When I try to use it, I get the following errors:




      LoadError: error in method definition: function Base.step must be
      explicitly imported to be extended
      LoadError: error in method definition: function Base.reset must be
      explicitly imported to be extended




      I don't know what Base.step and Base.reset are, and I don't want to extend them.



      Is there some way for me to keep these function names without extending the base functions? If I do just extend the base functions with my completely unrelated methods, are there going to be problems?



      I really do not want to change the names of my functions because I want to keep them in line with the OpenAI Gym API.










      share|improve this question













      I have the following, incomplete Julia code:



      mutable struct Env
      end

      function step(env, action:UInt32)
      return ones(8), 1.0, true, Dict()
      end

      function reset(env)
      return ones(8)
      end


      When I try to use it, I get the following errors:




      LoadError: error in method definition: function Base.step must be
      explicitly imported to be extended
      LoadError: error in method definition: function Base.reset must be
      explicitly imported to be extended




      I don't know what Base.step and Base.reset are, and I don't want to extend them.



      Is there some way for me to keep these function names without extending the base functions? If I do just extend the base functions with my completely unrelated methods, are there going to be problems?



      I really do not want to change the names of my functions because I want to keep them in line with the OpenAI Gym API.







      julia-lang






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 at 18:43









      Atuos

      440311




      440311
























          1 Answer
          1






          active

          oldest

          votes


















          3














          Define them inside a module like this



          module Gym

          mutable struct Env
          end

          function step(env, action::UInt32)
          return ones(8), 1.0, true, Dict()
          end

          function reset(env)
          return ones(8)
          end

          end


          Then you can call them directly as step and reset inside the module. Outside the module you have to qualify them like this: Gym.step and Gym.reset.



          Additionally - note that you get this problem only after you introduce step and reset in Main module before trying to extend them (e.g. by calling or referencing them). So when starting a clean Julia session this will work:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step(x) = x
          step (generic function with 1 method)


          but this will fail:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step
          step (generic function with 4 methods)

          julia> step(x) = x
          ERROR: error in method definition: function Base.step must be explicitly imported to be extended





          share|improve this answer























          • Excellent, thank you.
            – Atuos
            Nov 22 at 19:47











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436636%2fjulia-unintended-extension-of-base-functions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3














          Define them inside a module like this



          module Gym

          mutable struct Env
          end

          function step(env, action::UInt32)
          return ones(8), 1.0, true, Dict()
          end

          function reset(env)
          return ones(8)
          end

          end


          Then you can call them directly as step and reset inside the module. Outside the module you have to qualify them like this: Gym.step and Gym.reset.



          Additionally - note that you get this problem only after you introduce step and reset in Main module before trying to extend them (e.g. by calling or referencing them). So when starting a clean Julia session this will work:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step(x) = x
          step (generic function with 1 method)


          but this will fail:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step
          step (generic function with 4 methods)

          julia> step(x) = x
          ERROR: error in method definition: function Base.step must be explicitly imported to be extended





          share|improve this answer























          • Excellent, thank you.
            – Atuos
            Nov 22 at 19:47
















          3














          Define them inside a module like this



          module Gym

          mutable struct Env
          end

          function step(env, action::UInt32)
          return ones(8), 1.0, true, Dict()
          end

          function reset(env)
          return ones(8)
          end

          end


          Then you can call them directly as step and reset inside the module. Outside the module you have to qualify them like this: Gym.step and Gym.reset.



          Additionally - note that you get this problem only after you introduce step and reset in Main module before trying to extend them (e.g. by calling or referencing them). So when starting a clean Julia session this will work:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step(x) = x
          step (generic function with 1 method)


          but this will fail:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step
          step (generic function with 4 methods)

          julia> step(x) = x
          ERROR: error in method definition: function Base.step must be explicitly imported to be extended





          share|improve this answer























          • Excellent, thank you.
            – Atuos
            Nov 22 at 19:47














          3












          3








          3






          Define them inside a module like this



          module Gym

          mutable struct Env
          end

          function step(env, action::UInt32)
          return ones(8), 1.0, true, Dict()
          end

          function reset(env)
          return ones(8)
          end

          end


          Then you can call them directly as step and reset inside the module. Outside the module you have to qualify them like this: Gym.step and Gym.reset.



          Additionally - note that you get this problem only after you introduce step and reset in Main module before trying to extend them (e.g. by calling or referencing them). So when starting a clean Julia session this will work:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step(x) = x
          step (generic function with 1 method)


          but this will fail:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step
          step (generic function with 4 methods)

          julia> step(x) = x
          ERROR: error in method definition: function Base.step must be explicitly imported to be extended





          share|improve this answer














          Define them inside a module like this



          module Gym

          mutable struct Env
          end

          function step(env, action::UInt32)
          return ones(8), 1.0, true, Dict()
          end

          function reset(env)
          return ones(8)
          end

          end


          Then you can call them directly as step and reset inside the module. Outside the module you have to qualify them like this: Gym.step and Gym.reset.



          Additionally - note that you get this problem only after you introduce step and reset in Main module before trying to extend them (e.g. by calling or referencing them). So when starting a clean Julia session this will work:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step(x) = x
          step (generic function with 1 method)


          but this will fail:



          $ julia
          _
          _ _ _(_)_ | Documentation: https://docs.julialang.org
          (_) | (_) (_) |
          _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
          | | | | | | |/ _` | |
          | | |_| | | | (_| | | Version 1.0.2 (2018-11-08)
          _/ |__'_|_|_|__'_| | Official https://julialang.org/ release
          |__/ |

          julia> step
          step (generic function with 4 methods)

          julia> step(x) = x
          ERROR: error in method definition: function Base.step must be explicitly imported to be extended






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 22 at 19:27

























          answered Nov 22 at 19:18









          Bogumił Kamiński

          11.9k11120




          11.9k11120












          • Excellent, thank you.
            – Atuos
            Nov 22 at 19:47


















          • Excellent, thank you.
            – Atuos
            Nov 22 at 19:47
















          Excellent, thank you.
          – Atuos
          Nov 22 at 19:47




          Excellent, thank you.
          – Atuos
          Nov 22 at 19:47


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436636%2fjulia-unintended-extension-of-base-functions%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          What visual should I use to simply compare current year value vs last year in Power BI desktop

          Alexandru Averescu

          Trompette piccolo